也是草稿箱里的内容,想当年的知识:~不过还没写清楚。先放出来,然后慢慢地去完成。
在java层实用多媒体框架有下面几部:
1. new MediaPlayer()
2. setDataSource()
3. prepare()
4. play()
每一步都做了什么:
new MediaPlayer():
native_setup(): new MediaPlayer()------>setMediaPlayer()
setDataSource():
最终在AwesomePlayer中调用setAudioSource()和setVideoSource(). 这里的audio source和videosource还不具备解码功能。
prepare():
最终在AwesomePlayer中调用initAudioDecoder()和initVideoDecoder(). 封装了解码功能
play():
怎么开始解码的需要详细整理一下。
在prepare()和play()过程中,触发AwesomePlayer的工作是通过发送消息来完成的:
prepare(): mQueue.postEvent(mAsyncPrepareEvent);
play(): mQueue.postEventWithDelay(mVideoEvent, delayUs < 0 ? 10000 : delayUs);//仅仅针对video的播放
//audio的播放时通过startAudioPlayer_l()来开始的。
mQueue是TimedEventQueue类型的对象。需要先调用mQueue.start()来启动这个event queue用来接受并处理消息。postEvent和postEventWithDelay的参数在这里是一个AwesomeEvent对象。 AwesomeEvent继承自TimedEventQueue::Event类。