同步来自Mediacodec的解码audio和video数据

我想用MediaExtractorMediaCodec API编写一个简单的audio/video播放器。

我能够解码和渲染audiovideo 。 但是,我错过了audio - video同步。

我无法find任何API来控制audiovideo之间的同步。 有人可以告诉我,如何同步解码的audiovideo数据?

Solutions Collecting From Web of "同步来自Mediacodec的解码audio和video数据"

在Android资源中,有一个基于MediaCodec API的player引擎实例。 你可以检查位于frameworks/av/cmds/stagefright/SimplePlayer.cpp

在这个播放器引擎的实现中, MediaCodec的输出被dequeued并被推送到队列中,如下所示。 请查看第439-450行以获得完整的图片。

一旦缓冲区可用,这里就实现了一个简单的AV Sync机制。 请参阅508-521行。 在这个例子中,只有一个轨道被考虑,因此, nowUs即当前时间是从systemTime派生的,即ALooper::nowUs

在您的代码中,您可以考虑以first-come-first-serve呈现audio ,并为您的video轨道,您可以从音轨中导出 nowUs

一个简单的实现可以是nowUs = getAudioLastPresentationTime() ,其中, getAudioLastPresentationTime将返回从audio MediaCodec发送到audio renderer的最后一个presentationTimeUs