stagefright flow

来源:互联网 发布:北京 妇产科 排名 知乎 编辑:程序博客网 时间:2024/05/05 05:58

也是草稿箱里的内容,想当年的知识:~不过还没写清楚。先放出来,然后慢慢地去完成。


在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类。

0 0