最新项目中使用到了Android自带的Mediaplayer,所以在这里写了一个小Demo供大家参考使用。
##Java代码部分
package club.anhe.surfaceviewdemo.surfaceviewdemo;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import utils.CNTrace;
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback{
MediaPlayer mMediaPlayer;
SurfaceView mSurface;
private int mPosition = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSurface = (SurfaceView) findViewById(R.id.surface);
//mSurface.getHolder().setFixedSize(不要设置宽高,会自动拉伸播放,但不是我们所要的效果);
mSurface.getHolder().addCallback(this);
mSurface.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);//为了和低版本兼容添加上了这一句
mMediaPlayer = new MediaPlayer();
}
private void play() {
try {
mMediaPlayer.reset();//重置为初始状态
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);//设置音乐流的类型
mMediaPlayer.setDisplay(mSurface.getHolder());//设置video影片以surfaceviewholder播放
mMediaPlayer.setDataSource("/mnt/sdcard/sy.mp4");//设置路径,这里选用的是一个本地文件,Android支持http协议和rtsp协议。也可以填写这两个协议的链接。
mMediaPlayer.prepare();//缓冲
mMediaPlayer.start();//播放
} catch (Exception e) {
CNTrace.d(e.toString());
e.printStackTrace();
}
}
public void onClick(View view) {
switch (view.getId()) {
case R.id.play_start:
play();
break;
case R.id.play_pause:
if(mMediaPlayer.isPlaying()){
mMediaPlayer.pause();
}else{
mMediaPlayer.start();
}
break;
case R.id.play_stop:
if(mMediaPlayer.isPlaying()){
mMediaPlayer.stop();
}
break;
case R.id.test:
//startActivity(new Intent(this, TestActivity.class));
break;
}
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
CNTrace.d("surfaceCreated");
if(mPosition > 0){
play();
mMediaPlayer.seekTo(mPosition);
mPosition =0;
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
CNTrace.d("format : " + format + ", width : " + width + ", height : " + height);
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
CNTrace.d("surfaceDestroyed");
if(mMediaPlayer.isPlaying()){
mPosition = mMediaPlayer.getCurrentPosition();
mMediaPlayer.stop();
}
}
}
##Layout文件
<?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="club.anhe.surfaceviewdemo.surfaceviewdemo.MainActivity">
<SurfaceView
android:id="@+id/surface"
android:layout_gravity="center"
android:layout_height="480px"
android:layout_width="match_parent">
</SurfaceView>
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_below="@id/surface"
android:layout_height="wrap_content"
android:layout_width="fill_parent">
<Button
android:text="播放"
android:id="@+id/play_start"
android:onClick="onClick"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</Button>
<Button
android:text="暂停"
android:id="@+id/play_pause"
android:onClick="onClick"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</Button>
<Button
android:text="停止"
android:id="@+id/play_stop"
android:onClick="onClick"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</Button>
<Button
android:text="测试"
android:id="@+id/test"
android:onClick="onClick"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</Button>
</LinearLayout>
</RelativeLayout>
有了这两个文件大家就可以写出一个可以播放视频的小Demo来了。
项目放在了GitHub上,感兴趣的同学可以下载跑跑。https://github.com/kingroc711/AndroidMediaPlayer/releases/tag/SmallWindowPlay