0

我正在尝试分析在 Android 中播放视频时交换的消息流。我在这样做时遇到了这张图片。

http://img521.imageshack.us/img521/3585/capturehb.png

然后我浏览了 AwesomePlayer 和 TimedEventQueue 的源文件。我无法理解这些文件中事件的含义。对此的任何帮助表示赞赏。
谢谢你。

TimedEventQueue 源文件的链接附在下面。

https://github.com/cozybit/aosp-frameworks-base/blob/master/media/libstagefright/TimedEventQueue.cpp

4

1 回答 1

2

一般来说,TimedEventQueue是一种将 anevent推入queue具有特定的机制timeout。在 结束时,将调用timeout与 相关联的函数,该函数event将执行一些功能。来到 和 的关系,请在下面找到该关系的概述。AwesomePlayerTimedEventQueue

在 Android 中,AwesomePlayer是播放器引擎的核心实现,它产生videoaudio跟踪相关路径,并有助于player引擎的整体运行。

除此之外,它还用作轨道AwesomePlayerSINK ,即ie实现和显示管道 ie之间的桥梁。在进入之前,简单的操作总结如下。videoOMXCodecvideo decoderSurfaceTextureTimedEventQueue

player引擎在pull模型中工作,并通过调用AwesomePlayer从解码器中提取视频帧。read一旦视频帧可用,AV Synchronization逻辑就会进入画面,决定何时render播放该帧。一旦准备好渲染帧,就会通过调用将其传递给SurfaceTexture模块mVideoRenderer->render

Coming to TimedEventQueueAwesomePlayer使用这个概念来实现上述功能。当start调用 a时postVideoEvent_l(),调用 a。默认情况下,在 android 树中实现了一个时间延迟,之后触发此事件。当该事件被触发时,相应的函数被调用。在这种情况下,onVideoEvent被调用,然后将继续进行阻塞read调用。

接收到视频缓冲区后,如果视频帧音轨时间戳早10 毫秒,则postVideoEvent_l(10000)触发另一个,这将迫使该线程再休眠 10 毫秒,之后onVideoEvent再次触发。

类似地,在一个视频帧rendered之后,AwesomePlayer将触发另一个视频帧,该帧将默认postVideoEvent_l()休眠一段时间并返回并再次阻塞呼叫。read

于 2013-03-28T01:47:12.867 回答