我想使用MediaExtractor
和MediaCodec
API 编写一个简单的音频/视频播放器。
我能够解码和渲染audio
and video
。但是,我错过了audio - video
同步。
我找不到任何 API 来控制 和 之间的audio
同步video
。有人可以告诉我,如何同步解码audio
和video
数据?
我想使用MediaExtractor
和MediaCodec
API 编写一个简单的音频/视频播放器。
我能够解码和渲染audio
and video
。但是,我错过了audio - video
同步。
我找不到任何 API 来控制 和 之间的audio
同步video
。有人可以告诉我,如何同步解码audio
和video
数据?
在 Android 源代码中,有一个player
基于MediaCodec
API 的示例引擎实现。您可以检查SimplePlayer
位于frameworks/av/cmds/stagefright/SimplePlayer.cpp
。
在这个播放器引擎实现中,来自 的输出MediaCodec
被推dequeued
入队列,如下所示。请检查第 439 - 450 行以获得完整的图片。
一旦缓冲区可用,这里就实现了一个简单的AV Sync
机制。请参阅第 508 -521 行。在这个例子中,只考虑一个轨道,因此,即当前时间是从ie导出的。nowUs
systemTime
ALooper::nowUs
audio
在您的代码中,您可以考虑始终在first-come-first-serve
基础上进行渲染,并且对于您的video
轨道,您可以从轨道派生。nowUs
audio
一个简单的实现可能是nowUs = getAudioLastPresentationTime()
where,getAudioLastPresentationTime
将返回从 topresentationTimeUs
发送的最后audio
MediaCodec
一个audio renderer
。