2016-06-30-Android实现使用MediaPlayer+SurfaceView实现视频播放器

最近由于项目需求,需要做一个视频播放器,起初想到的是使用VideoView,但是始终觉得这个控件不常用,而且对于开发过程中出现的问题,也不太好解决(这是个人直觉,并未经过实践验证,有兴趣的童鞋可以去实验一下),话不多说,做过Android开发的童鞋大家都知道,Android播放音频使用的是mediaPlayer,但是mediaPlayer没有提供播放的界面,其实mediaPlayer可以给设置一个SurfaceHolder来播放视频的画面,不知道的东西可以上Android开发者网站上看一下:https://developer.android.com/reference/android/media/MediaPlayer.html#Permissions

1,在做任何关于音视频播放的应用中都应该处理Android的audioFocus(具体的我会在另外一篇文章中介绍)

2,使用mediaPlayer加载视频文件

mMediaPlayer.setDataSource(mp3);

// 设置音频流的类型

mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

mMediaPlayer.prepareAsync(); 

3,初始化surfaceView,然后getHolder(),addCallback

SurfaceHoldermSurfaceHolder=mVideoSurFaceView.getHolder();

mSurfaceHolder.addCallback(this);

mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);`

4,Callback.surfaceCreated()是时候给mediaPlayer设置surfaceHolder,并设置资源文件(第二步)。最开始我也考虑过在activity.onresume的时候开始,但是这样的不好处很明显就是可能在开始声音之后,几秒才能看到画面。而在Callback.surfaceCreated()的时候,可以保证在surfaceView创建完成,这个时候,开始播放视频,画面和音频就不会出现前面说的情况

 mMediaPlayer.start();

 mMediaPlayer.setDisplay(holder);

在Callback.surfaceDestroyed()的时候,暂停播放,在activity销毁的时候停止播放并释放资源

5,需要注意的一点是,在开始和暂停或者停止播放前都需要多MediaPlayer判空

你可能感兴趣的:(2016-06-30-Android实现使用MediaPlayer+SurfaceView实现视频播放器)