我想用MediaExtractor和MediaCodec API编写一个简单的音视频播放器。
我能够解码和渲染audio和video。但是,我错过了audio - video同步。
我找不到任何应用程序接口来控制audio和video之间的同步。谁能告诉我,如何同步解码的audio和video数据?
发布于 2013-03-29 07:48:19
在安卓源代码中,有一个基于MediaCodec API的player引擎实现示例。您可以在frameworks/av/cmds/stagefright/SimplePlayer.cpp上查找SimplePlayer。
在这个播放器引擎实现中,MediaCodec的输出是dequeued,并被推入一个队列,如here所示。请检查第439 - 450行以了解完整的情况。
一旦缓冲区可用,就有一个简单的AV Sync机制实现了here。请参考508 -521行。在该示例中,仅考虑一个轨道,并且因此从systemTime即ALooper::nowUs导出nowUs,即当前时间。
在您的代码中,您可以考虑始终在audio的基础上呈现first-come-first-serve,并且对于您的video track,您可以从audio track中派生 nowUs。
一个简单的实现可以是nowUs = getAudioLastPresentationTime(),其中getAudioLastPresentationTime将返回从audio MediaCodec发送到audio renderer的最后一个presentationTimeUs。
https://stackoverflow.com/questions/15691933
复制相似问题