Open core通过提供MediaPlayerAPI来支持播放,MediaPlayerAPI可用于播放媒体文件。可以说MediaPlayer是一款非常方便的多媒体播放器。本文将详细讲解MediaPlayer的使用方法,有需要的可以参考。
目录
MediaPlayer简单使用缺陷AndroidMediaPlayer播放器封装状态机编写内部类初始化函数方法和回调总结
MediaPlayer
Open core通过提供MediaPlayerAPI来支持播放,MediaPlayerAPI可用于播放媒体文件。可以说MediaPlayer是一款非常方便的多媒体播放器,只需要简单的设置就可以播放音频和视频,其内部帮助开发者实现了获取、解码和播放回放对象的功能。
简单使用
媒体支持多种资源形式:本地资源、内部URIs和外部URL。
//播放器实例化
media player=new media player();
//准备播放素材
Uri uri=Uri.fromFile(新文件(' sdcard/DCIM ',' Camera/test . MP4 '));
尝试{
//播放器加载资源
mediaPlayer.setDataSource(this,uri);
} catch (IOException e) {
e . printstacktrace();
}
//播放器的异步准备
media player . prepare async();
mediaPlayer . setonpreparedlistener(新media player。OnPreparedListener() {
@覆盖
公共void onPrepared(MediaPlayer mp) {
//播放操作
media player . start();
}
});
//播放窗口显示
surface view surface view=new surface view(this);
surfaceView.post(新的Runnable() {
@覆盖
公共无效运行(){
media player . set surface(surface view . get holder()。getSurface());
}
});
上面的代码示例是MediaPlayer的一个简单使用过程。其中prepareAsync()是异步操作。在执行回放操作之前,需要回调setOnPreparedListener方法来了解最终的播放器准备结果。当然,播放器也支持同步准备方式,但是建议使用异步操作,因为资源获取过程可能会涉及到解码数据,这将是一个耗时的操作,同步操作很可能会导致ANR错误。
缺陷
MediaPlayer虽然有内部状态,但有些操作只有在特定状态下正确操作才能生效。如果在未指定的状态下操作,可能会导致播放器异常,更容易死机。但是播放器的内部状态机并没有把接口暴露给开发者,所以不可能随时得到播放器的当前状态。
AndroidMediaPlayer播放器封装
由于缺陷,直接使用MediaPlayer无法很好地管理状态。所以MediaPlayer可以自己打包使用,可以整理功能,增加状态管理、统一错误处理等逻辑。
状态机编写
根据MediaPlayer状态图,预设几种状态类型来临时存储播放器的内部状态。
私有静态最终int IDLE=0;//空闲状态
private static final int INIT=3;//初始化状态
private static final int PREPARING=4;//就绪状态
private static final int PREPARED=5;//就绪状态
private static final int STARTED=6;//开始状态
private static final int PAUSED=7;//暂停状态
private static final int STOPPED=8;//停止状态
私有静态final int END=9;//结束状态
私有静态final int ERROR=10//错误状态
内部类
使用mPlayerStatus临时存储玩家状态
@IntDef({IDLE,
结束,
错误,
初始化,
准备好了,
开始了,
暂停了,
停了,
})
公共@接口状态{
}
MediaPlayer多媒体播放器;
上下文mContext
@状态
int mPlayerStatus=IDLE
初始化函数
初始化函数实例化播放器,注册基本播放所需的回调函数。
公共AndroidMediaPlayer(上下文上下文){
mContext=上下文;
mMediaPlayer=new media player();
mmediaplayer . setonerrorlistener(this);
mmediaplayer . setoncompletionlistener(this);
mmediaplayer . setonpreparedlistener(this);
mPlayerStatus=INIT
}
方法和回调
封装播放器播放和调用的基本方法,进行状态机判断。如果不在可操作范围内,则不能执行相应的操作。同时,通过native api的资源设置方法有很多现有形式,但这里只使用URIs作为参数。
//资源参与
公共void setSource(Uri uri){
尝试{
mmediaplayer . set data source(m context,uri);
mmediaplayer . prepare async();
mPlayerStatus=正在准备;
} catch (IOException e) {
e . printstacktrace();
}
}
//设置可视化窗口
public void setSurface(Surface ){
mMediaPlayer.setSurface(表面);
}
//开始播放
public void start(){
mmediaplayer . start();
mPlayerStatus=STARTED
}
//暂停
公共void pause(){
if(mPlayerStatus暂停)返回;
mmediaplayer . pause();
mPlayerStatus=暂停;
}
//停止
公共无效站点(){
if(mPlayerStatus已停止)返回;
mmediaplayer . stop();
mPlayerStatus=已停止;
}
//释放
公共无效发布(){
if(mPlayerStatus=INIT){
mmediaplayer . release();
mMediaPlayer=null
mPlayerStatus=END
}
}
//错误回调
@覆盖
public boolean on error(media player MP,int what,int extra) {
mPlayerStatus=ERROR
返回false
}
//播放回拨
@覆盖
公共void on completion(media player MP){
}
//准备成功的回调
@覆盖
公共void onPrepared(MediaPlayer mp) {
mPlayerStatus=已准备好;
}
小结
MediaPlayer作为官方打包播放器,使用起来并不困难。可以说开发者可以直接开箱使用。或许对于简单开发视频播放就够了,可以播放本地文件,也可以播放网络文件。然而,对MediaPlayer的深入了解可能还不够。然后阅读源代码,了解内部实现。之后,当你不得不自己实现编解码播放音视频的能力来处理和添加其他效果时,那么MediaPlayer可能就捉襟见肘了。
本文关于使用Android MediaPlayer进行音视频开发的教程到此结束。关于Android MediaPlayer的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。