[英]Synchronise Decoded Audio and Video data from Mediacodec
我想使用MediaExtractor
和MediaCodec
API编写一个简单的音频/视频播放器。
我能够解码和渲染audio
和video
。 但是,我错过了audio - video
同步。
我找不到任何API来控制audio
和video
之间的同步。 有人可以告诉我,如何同步解码的audio
和video
数据?
在Android源代码中,有一个基于MediaCodec
API的示例player
引擎实现。 你可以检查SimplePlayer
位于frameworks/av/cmds/stagefright/SimplePlayer.cpp
。
在这个播放器引擎的实现,从输出MediaCodec
被dequeued
,如图所示推入一个队列这里 。 请查看第439-450行以获得完整的图片。
一旦缓冲区可用,有一个简单的AV Sync
实现机制这里 。 请参阅第508-521行。 在这个例子中,只考虑一个轨道,因此, nowUs
即当前时间是从systemTime
派生的,即ALooper::nowUs
。
在您的代码中,您可以考虑始终以first-come-first-serve
呈现audio
,对于video
轨道,您可以从audio
轨道中获取 nowUs
。
一个简单的实现可以是nowUs = getAudioLastPresentationTime()
,其中, getAudioLastPresentationTime
将返回从audio
MediaCodec
发送到audio renderer
的最后一个presentationTimeUs
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.