diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d27aa5b..1b1c6a5 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -41,8 +41,7 @@ + android:screenOrientation="landscape" /> + android:screenOrientation="landscape" /> 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); diff --git a/app/src/main/java/com/frank/ffmpeg/activity/FilterActivity.java b/app/src/main/java/com/frank/ffmpeg/activity/FilterActivity.java index 668ca88..04c6c44 100644 --- a/app/src/main/java/com/frank/ffmpeg/activity/FilterActivity.java +++ b/app/src/main/java/com/frank/ffmpeg/activity/FilterActivity.java @@ -104,6 +104,7 @@ public class FilterActivity extends BaseActivity implements SurfaceHolder.Callba protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + hideActionBar(); initView(); registerLister(); diff --git a/app/src/main/java/com/frank/ffmpeg/activity/MediaPlayerActivity.java b/app/src/main/java/com/frank/ffmpeg/activity/MediaPlayerActivity.java index 36a97e8..69a1204 100644 --- a/app/src/main/java/com/frank/ffmpeg/activity/MediaPlayerActivity.java +++ b/app/src/main/java/com/frank/ffmpeg/activity/MediaPlayerActivity.java @@ -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(); + } + } } diff --git a/app/src/main/res/layout/activity_media_player.xml b/app/src/main/res/layout/activity_media_player.xml index 2ccb036..b2cc3ae 100644 --- a/app/src/main/res/layout/activity_media_player.xml +++ b/app/src/main/res/layout/activity_media_player.xml @@ -1,9 +1,7 @@ + android:layout_height="match_parent"> +