1.1.1 播放代码
MediaPlayer类是android framework提供的多媒体类,可以用来播放音频、视频和流媒体,MediaPlayer包含了Audio和Video的播放功能。
其基本的方法和功能简介如下:
MediaPlayer 构造方法
create 创建一个要播放的多媒体
getCurrentPosition 得到当前播放位置
getDuration 得到文件的时间
getVideoHeight 得到视频的高度
getVideoWidth 得到视频的宽度
isLooping 是否循环播放
isPlaying 是否正在播放
pause 暂停
prepare 准备(同步)
prepareAsync 准备(异步)
release 释放MediaPlayer对象
reset 重置MediaPlayer对象
seekTo 指定播放的位置(以毫秒为单位的时间)
setAudioStreamType 设置流媒体的类型
setDataSource 设置多媒体数据来源
setDisplay 设置用SurfaceHolder来显示多媒体
setLooping 设置是否循环播放
setOnButteringUpdateListener 网络流媒体的缓冲监听
setOnErrorListener 设置错误信息监听
setOnVideoSizeChangedListener 视频尺寸监听
setScreenOnWhilePlaying 设置是否使用SurfaceHolder来保持屏幕显示
setVolume 设置音量
start 开始播放
stop 停止播放
除开界面的相关布局和控件,声音播放的代码流程主要如下,
mPlayer = new MediaPlayer();
try {
mPlayer.setDataSource(mMediaItem.getPath());
mPlayer.setOnCompletionListener(this);
mPlayer.setOnErrorListener(mErrorListener);
mPlayer.prepare();
mPlayer.start();
}
它主要使用了MediaPlayer类来完成播放功能,对于该类的介绍请见后续章节。
MediaPlayer各个状态间关系如图:
Idle状态为空闲,Initialized状态为初始化,Idle状态加载了音频资源后进入Initialized状态,之后调用prepare()方法就可以进入Prepared状态。在Prepared状态调用start()方法便可播放音乐。在代码编写的时候,api如何调用,状态如何转换,请参见下面的状态流程图,避免在不正确的状态调用不合适的api,引起各种异常。
播放流程的功能块图如下,
播放过程中每个步骤的函数调用流程如下,
Init:
setDataSource:
prepareAsync:
在prepare里面,当MediaExtractor解析文件后会产生一个音频流和一个视频流(可能还有字幕流),对应一个MediaSource的数据结构。
Start: