MediaPlayerActivity接入基类Activity

MediaPlayerActivity接入基类Activity
pull/107/head
xufulong 5 years ago
parent af92d203fe
commit 8da7e7ad7b
  1. 6
      app/src/main/AndroidManifest.xml
  2. 14
      app/src/main/cpp/media_player.c
  3. 1
      app/src/main/java/com/frank/ffmpeg/activity/FilterActivity.java
  4. 82
      app/src/main/java/com/frank/ffmpeg/activity/MediaPlayerActivity.java
  5. 12
      app/src/main/res/layout/activity_media_player.xml
  6. 14
      app/src/main/res/values/colors.xml

@ -41,8 +41,7 @@
<!-- 音视频解码播放 -->
<activity
android:name=".activity.MediaPlayerActivity"
android:screenOrientation="landscape"
android:theme="@style/Theme.AppCompat.DayNight.NoActionBar" />
android:screenOrientation="landscape" />
<!-- 本地推流直播 -->
<activity
android:name=".activity.PushActivity"
@ -55,8 +54,7 @@
<!-- 滤镜特效 -->
<activity
android:name=".activity.FilterActivity"
android:screenOrientation="landscape"
android:theme="@style/Theme.AppCompat.DayNight.NoActionBar" />
android:screenOrientation="landscape" />
<!--视频倒播-->
<activity android:name=".activity.VideoReverseActivity"
android:screenOrientation="landscape"

@ -411,7 +411,7 @@ void* decode_func(void* arg){
//根据stream_index获取对应的AVPacket队列
AVPacketQueue *queue = player->packets[stream_index];
int ret = 0;
int video_frame_count = 0, audio_frame_count = 0;
// int video_frame_count = 0, audio_frame_count = 0;
for(;;) {
pthread_mutex_lock(&player->mutex);
AVPacket *packet = (AVPacket*)queue_pop(queue, &player->mutex, &player->cond);
@ -419,10 +419,10 @@ void* decode_func(void* arg){
if(stream_index == player->video_stream_index) {//视频流
ret = decode_video(player, packet);
LOGI("decode video stream = %d", video_frame_count++);
// LOGI("decode video stream = %d", video_frame_count++);
} else if(stream_index == player->audio_stream_index) {//音频流
ret = decode_audio(player, packet);
LOGI("decode audio stream = %d", audio_frame_count++);
// LOGI("decode audio stream = %d", audio_frame_count++);
}
av_packet_unref(packet);
if(ret < 0){
@ -432,7 +432,7 @@ void* decode_func(void* arg){
}
JNIEXPORT jint JNICALL Java_com_frank_ffmpeg_MediaPlayer_setup
(JNIEnv * env, jclass clazz, jstring filePath, jobject surface){
(JNIEnv * env, jobject instance, jstring filePath, jobject surface){
const char *file_name = (*env)->GetStringUTFChars(env, filePath, JNI_FALSE);
int ret;
@ -455,7 +455,7 @@ JNIEXPORT jint JNICALL Java_com_frank_ffmpeg_MediaPlayer_setup
//初始化音频相关参数
audio_decoder_prepare(player);
//初始化音频播放器
audio_player_prepare(player, env, clazz);
audio_player_prepare(player, env, instance);
//初始化音视频packet队列
init_queue(player, PACKET_SIZE);
@ -463,7 +463,7 @@ JNIEXPORT jint JNICALL Java_com_frank_ffmpeg_MediaPlayer_setup
}
JNIEXPORT jint JNICALL Java_com_frank_ffmpeg_MediaPlayer_play
(JNIEnv * env, jclass clazz){
(JNIEnv * env, jobject instance){
pthread_mutex_init(&player->mutex, NULL);
pthread_cond_init(&player->cond, NULL);
@ -488,7 +488,7 @@ JNIEXPORT jint JNICALL Java_com_frank_ffmpeg_MediaPlayer_play
}
JNIEXPORT void JNICALL Java_com_frank_ffmpeg_MediaPlayer_release
(JNIEnv * env, jclass clazz){
(JNIEnv * env, jobject instance){
//释放内存以及关闭文件
free(player->audio_track);
free(player->audio_track_write_mid);

@ -104,6 +104,7 @@ public class FilterActivity extends BaseActivity implements SurfaceHolder.Callba
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
hideActionBar();
initView();
registerLister();

@ -1,44 +1,53 @@
package com.frank.ffmpeg.activity;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;
import com.frank.ffmpeg.MediaPlayer;
import com.frank.ffmpeg.R;
import com.frank.ffmpeg.util.FileUtil;
import java.io.File;
/**
* 音视频解码播放
* Created by frank on 2018/2/12.
*/
public class MediaPlayerActivity extends AppCompatActivity implements SurfaceHolder.Callback {
public class MediaPlayerActivity extends BaseActivity implements SurfaceHolder.Callback {
private static final String TAG = MediaPlayerActivity.class.getSimpleName();
SurfaceHolder surfaceHolder;
private final static String PATH = Environment.getExternalStorageDirectory().getPath() + File.separator;
private String filePath = PATH + "hello.mp4";
private SurfaceHolder surfaceHolder;
private MediaPlayer mediaPlayer;
private boolean surfaceCreated;
private Button btnSelectFile;
@Override
int getLayoutId() {
return R.layout.activity_media_player;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_media_player);
hideActionBar();
initView();
initPlayer();
}
private void initView(){
SurfaceView surfaceView = (SurfaceView) findViewById(R.id.surface_media);
SurfaceView surfaceView = getView(R.id.surface_media);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
// Button btn_slow = (Button) findViewById(R.id.btn_play_slow);
// Button btn_fast = (Button) findViewById(R.id.btn_play_fast);
btnSelectFile = getView(R.id.btn_select_file);
initViewsWithClick(R.id.btn_select_file);
}
private void initPlayer(){
@ -47,21 +56,7 @@ public class MediaPlayerActivity extends AppCompatActivity implements SurfaceHol
@Override
public void surfaceCreated(SurfaceHolder holder) {
if (!FileUtil.checkFileExist(filePath)){
return;
}
new Thread(new Runnable() {
@Override
public void run() {
int result = mediaPlayer.setup(filePath, surfaceHolder.getSurface());
if(result < 0){
Log.e(TAG, "mediaPlayer-->setup");
return;
}
mediaPlayer.play();
}
}).start();
surfaceCreated = true;
}
@Override
@ -83,4 +78,35 @@ public class MediaPlayerActivity extends AppCompatActivity implements SurfaceHol
}
}
private void startPlay(final String filePath) {
new Thread(new Runnable() {
@Override
public void run() {
int result = mediaPlayer.setup(filePath, surfaceHolder.getSurface());
if(result < 0){
Log.e(TAG, "mediaPlayer setup error!");
return;
}
mediaPlayer.play();
}
}).start();
}
@Override
void onSelectedFile(String filePath) {
if (!FileUtil.checkFileExist(filePath)){
return;
}
if (surfaceCreated) {
btnSelectFile.setVisibility(View.GONE);
startPlay(filePath);
}
}
@Override
void onViewClick(View view) {
if (view.getId() == R.id.btn_select_file) {
selectFile();
}
}
}

@ -1,9 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.frank.ffmpeg.activity.MediaPlayerActivity">
android:layout_height="match_parent">
<SurfaceView
android:id="@+id/surface_media"
@ -30,4 +28,12 @@
android:text="@string/video_fast"
android:visibility="gone"/>
<Button
android:id="@+id/btn_select_file"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_margin="16dp"
android:text="@string/select_file" />
</RelativeLayout>

@ -3,11 +3,11 @@
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
<color name="colorMain">#ffffff</color>
<color name="colorBord">#d7d7d7</color>
<color name="redBtn">#ff2c29</color>
<color name="blueBtn">#00ddff</color>
<color name="gray">#bebebe</color>
<color name="orange">#ff9800</color>
<color name="trasnsWhite">#32ffffff</color>
<color name="colorWhite">#FFFFFF</color>
<color name="colorBord">#D7D7D7</color>
<color name="redBtn">#FF2C29</color>
<color name="blueBtn">#00DDFF</color>
<color name="gray">#BEBEBE</color>
<color name="orange">#FF9800</color>
<color name="trasnsWhite">#32FFFFFF</color>
</resources>

Loading…
Cancel
Save