Android Media Player中的事件是什么意思?

时间:2013-03-27 17:06:03

标签: android android-mediaplayer

我正在尝试分析在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

1 个答案:

答案 0 :(得分:2)

通常,TimedEventQueue是将event推送到具有特定queue的{​​{1}}的机制。在timeout的末尾,与timeout相关联的函数被调用,这将执行某些功能。来到eventAwesomePlayer的关系,请查看以下关系的概述。

在Android中,TimedEventQueue是播放器引擎的核心实现,它会生成AwesomePlayervideo跟踪相关路径,并有助于audio的整体运作发动机。

除此之外,player还可用作AwesomePlayer曲目的 SINK ,即videoOMXCodec实施与展示之间的桥梁管道即video decoder。在进入SurfaceTexture之前,操作的简要总结如下。

TimedEventQueue引擎在player模型中工作,pull通过AwesomePlayer调用从解码器中提取视频帧。一旦视频帧可用,read逻辑将进入图像,该逻辑将决定何时AV Synchronization帧。一旦帧准备好呈现,它就会通过render调用传递给SurfaceTexture模块。

mVideoRenderer->renderTimedEventQueue使用此概念来实现上述功能。调用AwesomePlayer时,会调用start。默认情况下,在android树中实现了一个时间延迟,之后触发此事件。触发此事件时,将调用相应的函数。在这种情况下,会调用postVideoEvent_l(),然后进行阻止onVideoEvent调用。

收到视频缓冲区后,如果视频帧早于音频轨道时间戳 10 ms,则触发另一个read强制该线程再睡10ms,之后再次触发postVideoEvent_l(10000)

同样,在视频帧为onVideoEvent之后,rendered将触发另一个AwesomePlayer,其将在默认一段时间内休眠并返回并阻止在postVideoEvent_l()再次致电。