我正在尝试分析在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
答案 0 :(得分:2)
通常,TimedEventQueue
是将event
推送到具有特定queue
的{{1}}的机制。在timeout
的末尾,与timeout
相关联的函数被调用,这将执行某些功能。来到event
和AwesomePlayer
的关系,请查看以下关系的概述。
在Android中,TimedEventQueue
是播放器引擎的核心实现,它会生成AwesomePlayer
和video
跟踪相关路径,并有助于audio
的整体运作发动机。
除此之外,player
还可用作AwesomePlayer
曲目的 SINK ,即video
即OMXCodec
实施与展示之间的桥梁管道即video decoder
。在进入SurfaceTexture
之前,操作的简要总结如下。
TimedEventQueue
引擎在player
模型中工作,pull
通过AwesomePlayer
调用从解码器中提取视频帧。一旦视频帧可用,read
逻辑将进入图像,该逻辑将决定何时AV Synchronization
帧。一旦帧准备好呈现,它就会通过render
调用传递给SurfaceTexture
模块。
来mVideoRenderer->render
,TimedEventQueue
使用此概念来实现上述功能。调用AwesomePlayer
时,会调用start
。默认情况下,在android树中实现了一个时间延迟,之后触发此事件。触发此事件时,将调用相应的函数。在这种情况下,会调用postVideoEvent_l()
,然后进行阻止onVideoEvent
调用。
收到视频缓冲区后,如果视频帧早于音频轨道时间戳 10 ms,则触发另一个read
强制该线程再睡10ms,之后再次触发postVideoEvent_l(10000)
。
同样,在视频帧为onVideoEvent
之后,rendered
将触发另一个AwesomePlayer
,其将在默认一段时间内休眠并返回并阻止在postVideoEvent_l()
再次致电。