多媒体之MediaPlayer原理

Android-多媒体之MediaPlayer原理 一 MediaPlayer原理图

二 解析MediaPlayer原理 MediaPlayer控制状态 当MediaPlayer对象感new或者调用了restet()之后,即处于Idie状态 release()之后就处于end状态,,这两个状态之间的生命周期不同

引入播放控制的侦听机制: 我们通常会遇到下面个中复杂的问题: 播放格式不允许,文件格式损坏,视频分辨率过高,流超时等 为了有效的帮助我们检测并且处理这些错误,当然需要一套错误的监听机制:

setOnErrorListener(android)

调用setDataSource()方法会将MediaPlayer对象从IDel状态转为Initialized状态: 1.只要是Idel之外的所有状态调用setDataSource就出现IllegalStateException 2.建议调用setDataSource()方法的时候捕获IllegalStateException和IOException异常 MediaPlayer必须先要进入prepared状态才可以start: 同步prepare() 异步prepareAsync和sOnPreparedListener(android.media.MediaPlayer.onPrepareListener) preparing是一个机器短暂的状态 在prepared状态,可以调用相应的方法调整Volume,sceenOnWhilePalying. looper等

调用start进入started状态,可以调用isPlaying判断是否是started状态: 播放过程中可以用 setOnBufferingUpdateListener(OnBufferingUpdateListener) 但是正在播放中调用start()无效果

started状态可以调用pause(),stop进入暂停和停止状态: 正在播放中调用pause()进入到pause状态异步需要一点时间,甚至是几秒钟 paused状态调用pause()无效果

调用stop()可以让started,paused,prepared或者PlaybackCompleted状态进入到stopped状态 一旦stopped,流程有效果 stopped状态调用stop()无效果

通过seekTo(int)调整播放的进度: 调用后同样需要一些时间才能真正执行结束

播放到达流终点,播放停止: 如果设定了自动循环,这状态会自动改变为started

如果setLooping(false),则监听setOnCompletionListener(OnCompletionListener)

PalybackCompleted状态,直接调用start()可以重新播放

二 使用异步准备perpareAsync prepare也需要花时间,一般情况下比较短,但是对于UI的主线程来说,即使是0.5秒,也不短 因为他有时候会包含识别和解码文件,就是耗时间的操作 因此:不要在UI线程直接调用prepare(),很容易引起ANR 所以:开启另一个线程,准备好后通知UI线程(handler) 或者使用perpareAsync()异步准备(一般采用这种方法)

四 MediaPlayer的释放 MediaPlayer会占用大量的关联职员, 因此不用了要及时的释放,释放方式: mMediaPlayer.release(); mMediaPlayer = null;

五 使用后台服务

六 使用wake lock

七 运行前台服务

八 操作声音焦点 声音间的切换就是切换声音的焦点

二 音乐和视频播放 需要知道的问题: Android音视频支持的播放格式

每当我看天的时候我就不喜欢再说话,每当我说话的时候我却敢看天。

多媒体之MediaPlayer原理

相关文章:

你感兴趣的文章:

标签云: