1. MediaPlayer播放流程
下面是在Java中调用MediaPlayer实现播放的简单流程
mMediaPlayer.setDataSource(filePath);
mMediaPlayer.prepare();
mDuration.setText(String.valueOf(mMediaPlayer.getDuration()));
mVideoWidht = mMediaPlayer.getVideoWidth();
mVideoHeight = mMediaPlayer.getVideoHeight();
if( mVideoWidht!=0 && mVideoHeight != 0 )
{
mMediaPlayer.start();
}
2. MediaPlayer状态转移图
椭圆:状态
箭头:操作
单箭头-->同步操作
双箭头-->>异步操作
2.1 IdleState 和 EndState
IdleState : new 或者 reset()之后
EndState:release()之后
在IdleState 和 EndState状态中不能调用getCurrentPosition()
, getDuration()
, getVideoHeight()
, getVideoWidth()
, setAudioStreamType(int)
, setLooping(boolean)
, setVolume(float, float)
, pause()
, start()
, stop()
,seekTo(int)
, prepare()
or prepareAsync()
二者的区别在于调用后的反馈不同:
IdleState: 调用OnErrorListener.onError() ,状态不变
EndState:调用OnErrorListener.onError(),状态变为ErrorState
2.2 stop
在调用stop后必须调用prepare() or prepareAsync() 才能进入started状态
2.3 prepare() prepareAsync()
作用:预处理播放器为播放做准备
二者的不同在于
prepare:同步操作
prepareAsync:异步操作, 常用用于数据源为流; prepareAsync给出的错误信息也更多
2.4 Completed State
播放结束后的状态, 其后续的状态转移可由setLooping(boolean)设置:
setLooping( true ) : 直接