|
|
|
@ -1,71 +1,49 @@ |
|
|
|
|
package com.frank.ffmpeg.activity; |
|
|
|
|
|
|
|
|
|
import android.os.Bundle; |
|
|
|
|
import android.os.Environment; |
|
|
|
|
import android.support.v7.app.AppCompatActivity; |
|
|
|
|
import android.util.Log; |
|
|
|
|
import android.view.SurfaceHolder; |
|
|
|
|
import android.view.SurfaceView; |
|
|
|
|
import android.view.View; |
|
|
|
|
import android.widget.Button; |
|
|
|
|
import android.widget.Toast; |
|
|
|
|
|
|
|
|
|
import com.frank.ffmpeg.R; |
|
|
|
|
import com.frank.ffmpeg.VideoPlayer; |
|
|
|
|
import com.frank.ffmpeg.util.FileUtil; |
|
|
|
|
|
|
|
|
|
import java.io.File; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 使用ffmpeg播放视频 |
|
|
|
|
* Created by frank on 2018/2/1. |
|
|
|
|
*/ |
|
|
|
|
public class VideoPlayerActivity extends AppCompatActivity implements SurfaceHolder.Callback { |
|
|
|
|
public class VideoPlayerActivity extends BaseActivity implements SurfaceHolder.Callback { |
|
|
|
|
private static final String TAG = VideoPlayerActivity.class.getSimpleName(); |
|
|
|
|
SurfaceHolder surfaceHolder; |
|
|
|
|
private final static String PATH = Environment.getExternalStorageDirectory().getPath() + File.separator; |
|
|
|
|
private String filePath = PATH + "hello.mp4"; |
|
|
|
|
private VideoPlayer videoPlayer; |
|
|
|
|
//播放倍率
|
|
|
|
|
private float playRate = 1; |
|
|
|
|
|
|
|
|
|
private boolean surfaceCreated; |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
int getLayoutId() { |
|
|
|
|
return R.layout.activity_video_player; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
protected void onCreate(Bundle savedInstanceState) { |
|
|
|
|
super.onCreate(savedInstanceState); |
|
|
|
|
setContentView(R.layout.activity_video_player); |
|
|
|
|
|
|
|
|
|
initView(); |
|
|
|
|
initPlayer(); |
|
|
|
|
showToast(getString(R.string.please_click_select)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void initView(){ |
|
|
|
|
SurfaceView surfaceView = (SurfaceView) findViewById(R.id.surface_view); |
|
|
|
|
private void initView() { |
|
|
|
|
SurfaceView surfaceView = getView(R.id.surface_view); |
|
|
|
|
surfaceHolder = surfaceView.getHolder(); |
|
|
|
|
surfaceHolder.addCallback(this); |
|
|
|
|
|
|
|
|
|
Button btn_slow = (Button) findViewById(R.id.btn_slow); |
|
|
|
|
btn_slow.setOnClickListener(new View.OnClickListener() { |
|
|
|
|
@Override |
|
|
|
|
public void onClick(View view) { |
|
|
|
|
if(playRate <= 32){ |
|
|
|
|
playRate *= 2; |
|
|
|
|
} |
|
|
|
|
Log.i(TAG, "playRate=" + playRate); |
|
|
|
|
videoPlayer.setPlayRate(playRate); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
Button btn_fast = (Button) findViewById(R.id.btn_fast); |
|
|
|
|
btn_fast.setOnClickListener(new View.OnClickListener() { |
|
|
|
|
@Override |
|
|
|
|
public void onClick(View view) { |
|
|
|
|
if(playRate >= 1/32){ |
|
|
|
|
playRate *= 0.5; |
|
|
|
|
} |
|
|
|
|
Log.i(TAG, "playRate=" + playRate); |
|
|
|
|
videoPlayer.setPlayRate(playRate); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
initViewsWithClick(R.id.btn_slow); |
|
|
|
|
initViewsWithClick(R.id.btn_fast); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void initPlayer(){ |
|
|
|
@ -74,10 +52,24 @@ public class VideoPlayerActivity extends AppCompatActivity implements SurfaceHol |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void surfaceCreated(SurfaceHolder holder) { |
|
|
|
|
surfaceCreated = true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void surfaceDestroyed(SurfaceHolder holder) { |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void startPlay(final String filePath) { |
|
|
|
|
new Thread(new Runnable() { |
|
|
|
|
@Override |
|
|
|
|
public void run() { |
|
|
|
|
if (!FileUtil.checkFileExist(filePath)){ |
|
|
|
|
if (!FileUtil.checkFileExist(filePath)) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -87,20 +79,39 @@ public class VideoPlayerActivity extends AppCompatActivity implements SurfaceHol |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { |
|
|
|
|
|
|
|
|
|
protected void onDestroy() { |
|
|
|
|
super.onDestroy(); |
|
|
|
|
if(videoPlayer != null){ |
|
|
|
|
videoPlayer = null; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void surfaceDestroyed(SurfaceHolder holder) { |
|
|
|
|
|
|
|
|
|
void onViewClick(View view) { |
|
|
|
|
switch (view.getId()) { |
|
|
|
|
case R.id.btn_fast: |
|
|
|
|
if(playRate >= 1/32){ |
|
|
|
|
playRate *= 0.5; |
|
|
|
|
} |
|
|
|
|
Log.i(TAG, "fast playRate=" + playRate); |
|
|
|
|
videoPlayer.setPlayRate(playRate); |
|
|
|
|
break; |
|
|
|
|
case R.id.btn_slow: |
|
|
|
|
if(playRate <= 32){ |
|
|
|
|
playRate *= 2; |
|
|
|
|
} |
|
|
|
|
Log.i(TAG, "slow playRate=" + playRate); |
|
|
|
|
videoPlayer.setPlayRate(playRate); |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
protected void onDestroy() { |
|
|
|
|
super.onDestroy(); |
|
|
|
|
if(videoPlayer != null){ |
|
|
|
|
videoPlayer = null; |
|
|
|
|
void onSelectedFile(String filePath) { |
|
|
|
|
if (surfaceCreated) { |
|
|
|
|
startPlay(filePath); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|