前言
本篇博客就来讲讲 MediaPlayer 如何播放视频,最后将以一个简单的 Demo 演示。
常用方法
- getCurrentPosition( ):得到当前的播放位置
- getDuration() :得到文件的时间
- getVideoHeight() :得到视频高度
- getVideoWidth() :得到视频宽度
- isLooping():是否循环播放
- isPlaying():是否正在播放
- pause():暂停
- prepare():准备(同步)
- prepareAsync():准备(异步)
- release():释放MediaPlayer对象
- reset():重置MediaPlayer对象
- seekTo(int msec):指定播放的位置(以毫秒为单位的时间)
- setAudioStreamType(int streamtype):指定流媒体的类型
- setDisplay(SurfaceHolder sh):设置用SurfaceHolder来显示多媒体
- setLooping(boolean looping):设置是否循环播放
- setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListener listener): 网络流媒体的缓冲监听
- setOnCompletionListener(MediaPlayer.OnCompletionListener listener): 网络流媒体播放结束监听
- setOnErrorListener(MediaPlayer.OnErrorListener listener): 设置错误信息监听
- setOnVideoSizeChangedListener(MediaPlayer.OnVideoSizeChangedListener listener): 视频尺寸监听
- setScreenOnWhilePlaying(boolean screenOn):设置是否使用SurfaceHolder显示
- setVolume(float leftVolume, float rightVolume):设置音量
- start():开始播放
- stop():停止播放
实例
1. 布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.hjq.bar.TitleBar
android:id="@+id/title_bar"
android:layout_width="match_parent"
android:background="@color/teal_200"
android:layout_height="?android:attr/actionBarSize"
app:title="VideoView 使用"
app:titleStyle="bold"
app:titleSize="18sp"
app:backButton="false"
app:titleColor="@color/white"/>
<SurfaceView
android:id="@+id/sfv_show"
android:layout_width="match_parent"
android:layout_height="300dp" />
<Button
android:id="@+id/btn_start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开始" />
<Button
android:id="@+id/btn_pause"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="暂停 " />
<Button
android:id="@+id/btn_stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="终止" />
</LinearLayout>
2. 代码
public class MainActivity extends BaseActivity implements SurfaceHolder.Callback {
@BindView(R.id.btn_start)
Button mStart;
@BindView(R.id.btn_pause)
Button mPause;
@BindView(R.id.btn_stop)
Button mStop;
@BindView(R.id.sfv_show)
SurfaceView mSurfaceView;
private SurfaceHolder surfaceHolder;
private MediaPlayer mPlayer = null;
@Override
protected int getLayoutId() {
return R.layout.activity_main;
}
@Override
protected void initView() {
//初始化SurfaceHolder类,SurfaceView的控制器
surfaceHolder = mSurfaceView.getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setFixedSize(320, 220); //显示的分辨率,不设置为视频默认
}
@OnClick({R.id.btn_start,R.id.btn_pause,R.id.btn_stop})
public void clicked(View view) {
switch (view.getId()) {
case R.id.btn_start:
mPlayer.start();
break;
case R.id.btn_pause:
mPlayer.pause();
break;
case R.id.btn_stop:
mPlayer.stop();
break;
}
}
@Override
public void surfaceCreated(@NonNull SurfaceHolder surfaceHolder) {
mPlayer = MediaPlayer.create(MainActivity.this, R.raw.local_video);
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mPlayer.setDisplay(surfaceHolder); //设置显示视频显示在SurfaceView上
}
@Override
public void surfaceChanged(@NonNull SurfaceHolder surfaceHolder, int i, int i1, int i2) {
}
@Override
public void surfaceDestroyed(@NonNull SurfaceHolder surfaceHolder) {
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mPlayer.isPlaying()) {
mPlayer.stop();
}
mPlayer.release();
}
}
3. 资源文件 raw 位置