上篇采用MediaRecoder录制视频,这篇采用MediaPlayer播放录制的视频
前两个步骤与MediaRecoder一样
创建一个MediaPlayerActivity
创建MediaPlayer的步骤
1)、创建mediaPlayer对象:new MediaPlayer()
2)、设置视频源:setDataSource()
3)、设置异步准备或同步准备(当使用网络请求播放视频时最好使用异步准备):prepareAsync()
4)、设置准备监听器:OnPrepareListener()
5)、设置回调监听器,用来反馈视频播放完成后的操作:OnCompletionListener()
6)、设置画布,用来播放视频:setSurface()
7)、开始播放:start()
8)、结束播放:stop()
9)、释放:release()
MediaPlayerActivity
public class MediaPlayerActivity extends AppCompatActivity implements View.OnClickListener, MediaPlayer.OnPreparedListener, MediaPlayer.OnCompletionListener {
private SurfaceView surface;
private Button btn;
private MediaPlayer mediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_media_player);
surface = findViewById(R.id.surface);
btn = findViewById(R.id.button2);
btn.setOnClickListener(this);
}
@Override
public void onClick(View view) {
String s = btn.getText().toString();
if(s.equals("开始")){
btn.setText("结束");
mediaPlayer = new MediaPlayer();//创建
//设置准备监听
mediaPlayer.setOnPreparedListener(this);
//设置结束监听
mediaPlayer.setOnCompletionListener(this);
try {
//设置播放视频来源
mediaPlayer.setDataSource
(new File(getExternalFilesDir(""), "a.mp4").getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.prepareAsync();//异步准备
mediaPlayer.setSurface(surface.getHolder().getSurface());//设置画布
}else{
btn.setText("开始");
mediaPlayer.stop();
mediaPlayer.release();
}
}
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.start();
}
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
btn.setText("开始");
mediaPlayer.release();
}
}
布局
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MediaPlayerActivity">
<SurfaceView
android:id="@+id/surface"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:layout_editor_absoluteX="-200dp"
tools:layout_editor_absoluteY="16dp" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开始"
app:layout_constraintBottom_toBottomOf="@+id/surface"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>