使用MediaPlayer播放視頻的步驟:
1.創建MediaPlayer對象,並讓MediaPlayer加載指定的視頻文件;
2.在界面佈局文件定義Surfaceview組件或者在程序中創建Surfaceview組件,併爲Surfaceview的SurfaceHolder添加Callback監聽器;
3.調用MediaPlayer對象的setDisplay(SurfaceHolder sh)將所有播放的視頻圖像輸出到指定的Surfaceview組件;
4.調用MediaPlayer對象的start()、stop()、pause()方法控制視頻的播放;
Demo:
Layout比較簡單不貼了,一個surfaceview 三個Button。
package com.example.evalee.surfaceviewplayvideo;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;
import java.io.IOException;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
SurfaceView surfaceView;
Button play,pause,stop;
MediaPlayer mediaPlayer;
int position;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
surfaceView = (SurfaceView)findViewById(R.id.surfaceview);
play = (Button)findViewById(R.id.play);
pause = (Button)findViewById(R.id.pause);
stop = (Button)findViewById(R.id.stop);
play.setOnClickListener(this);
pause.setOnClickListener(this);
stop.setOnClickListener(this);
mediaPlayer = new MediaPlayer();
surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
surfaceView.getHolder().setKeepScreenOn(true);
surfaceView.getHolder().addCallback(new SurfaceListener());
}
@Override
public void onClick(View v) {
try{
switch(v.getId()){
case R.id.play:
play();
break;
case R.id.pause:
if(mediaPlayer.isPlaying()){
mediaPlayer.pause();
} else {
mediaPlayer.start();
}
break;
case R.id.stop:
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
}
break;
}
}catch (Exception e){
e.printStackTrace();
}
}
public void play() throws IOException{
mediaPlayer.reset();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(Environment.getExternalStorageDirectory()+"/DCIM/Camera/VID_20170410_142616.3gp");
mediaPlayer.setDisplay(surfaceView.getHolder());
mediaPlayer.prepare();
mediaPlayer.start();
}
@Override
protected void onPause() {
if(mediaPlayer.isPlaying()){
position = mediaPlayer.getCurrentPosition();
mediaPlayer.stop();
}
super.onPause();
}
@Override
protected void onDestroy() {
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
mediaPlayer.release();
}
super.onDestroy();
}
private class SurfaceListener implements SurfaceHolder.Callback{
@Override
public void surfaceCreated(SurfaceHolder holder) {
if(position > 0){
try{
play();
mediaPlayer.seekTo(position);
position = 0;
}catch (Exception e){
e.printStackTrace();
}
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
}
}
AndroidManifest.xml 添加讀寫SD卡權限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
效果圖: