Android Multimedia序列1(框架总结 )

Android Multimedia序列1(框架总结 )---MediaPlayer介绍之状态图及生命周期

一、前言

从本篇开始,将进入Multimedia框架,包含MediaPlayer, Camera, Surface, MediaRecord, 接下来几篇都是MediaPlayer相关。

同样看下Agenda如下:
(1):MediaPlayer的状态图
(2):Idle 状态
(3):End 状态
(4):Error 状态
(5):Initialized状态
(6):Prepared状态
(7):Preparing状态
(8):Started状态
(9):Paused状态
(10):Stopped状态
(11):PlaybackCompleted状态

二、MediaPlayer介绍

MediaPlayer类是用于控制playback的视频/音频文件 及 流。
主要覆盖如下以下方面:
(1) 状态图
(2) 有效状态及无效状态
(3) 权限
(4) 回调方法
 

2.1、MediaPlayer的状态图

playback控制视频/音频文件及流是被状态机进行管理。
下图显示MediaPlayer生命周期以及由playback控制操作所影响。



椭圆代表MediaPlayer驻留的状态
弧代表playback控制且驱动MediaPlayer状态进行过渡。
有两种类型的弧,一种是用单箭头表示的是同步方法调用,另一种有两个箭头代表异步方法调用

从状态图中,能看到MediaPlayer有如下一些状态:
 

2.2、Idle 状态及End 状态

当MediaPlayer 用 new 或者在 reset 方法调用后,就被创建了, 这个时候它是处于Idle (就绪)状态,
当 releasel 方法被调用后,它就属于 End(结束状态),这两种下状态之间,就是 MediaPlayer的生命周期。
 

2.3、Error 状态

  1. 有一种微妙的 但 又非常重要的时刻
    当构造 一个新的 MediaPlayer 或者 reset() 方法被调和后。
    在这两种情况下,应用程序调用getCurrentPosition,getVideoHeight(),getDuration(),getVideoWidth(),setAudioStramType(int),setLooping(boolem),setVolume(float, float),pause(),start(), stop(), seekTo(int), prepare(), prepareAsync(),这些方法在Idle(就绪状态) 时有可能出错。

    如果这些方法在MediaPlayer 被构造后,调用正确的话,用户提供回调函数方法OnErrorListener.onError() 将不会调用在player内部,MediaPlayer的状态也不会变化,但是这些方法如果是在reset 方法如果是在reset 方法调用后,再调用时,用户提供的回调方法OnErrorListener.onError() 将传递MediaPlayer 到 Error (错误)的状态,所以,也推荐一旦MediaPlayer 不再使用时,马上调用下release 方法, 以便 MediaPlayer 资源得到释放, 这些资源也许包含一些单例。
    如硬的加速组件和失败去调用release 也许引起后续 MediaPlayer 实例回退到软件非播放页或退出。

  2. 一旦MediaPlayer 是End 结束状时,它将不再能被使用,没有任何办法带它回到MediaPlayer的其它状态。
    生命周期已经终止。
    进一步说,当MediaPlay 使用NEW 创建后,变成Idle 就绪状态时,同时这些创建 重载创建create 方法,不是Idle 就绪状态。
    事实上,如果创建时使用create 方法成功的话,这些已经是Prepared(准备好)状态。

  3. 总的来说,一些Playback 的控制操件也许会失败,由于各种原因,如不支持的音频格式,糟糕的音视频交错,分辨率过高,流超时,等等。
    因此,在这种情况下,错误报告并覆盖相关问题是非常重要的。 有时,由于程序错误,调用playback 控制操作也许会变得无效。
    在这种错误的条件下,如果事先,用户通过setOnErrorListener 注册过 OnErrorListener ,这时player 内部诘用 OnErrorListener.OnError() 回调方法, 将会把错误信息返回了去。一旦发生错误,MediaPlayer就会进入Error状态,为了重新利用Mediaplayer, 在Error 状态时,调用reset 方法将重新恢复到 Idle 就绪状态,所以让自已的MediaPlayer注册OnErrorListener 是一个好的编程习惯, 可以从Player 内部返回来的信息帮你找到错误。

  4. 调用prepare 方法,或者 prepareAsync 方法,或者 重载setDataResource 方法。 抛出IllegalStateExceprion 为防止程序错误。

2.4、Initialized状态

2.5、Prepared状态

2.6、Started状态

2.7、Paused状态

2.8、Stopped状态

2.9、PlaybackCompleted状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值