【问题标题】:Synchronise Decoded Audio and Video data from Mediacodec从 Mediacodec 同步解码的音频和视频数据
【发布时间】:2013-03-28 20:53:17
【问题描述】:

我想使用MediaExtractorMediaCodec API 编写一个简单的音频/视频播放器。

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

我找不到任何 API 来控制 audiovideo 之间的同步。 谁能告诉我,如何同步解码的audiovideo 数据?

【问题讨论】:

    标签: android android-mediaplayer


    【解决方案1】:

    在 Android 源代码中,有一个基于 MediaCodec API 的示例 player 引擎实现。您可以检查位于frameworks/av/cmds/stagefright/SimplePlayer.cppSimplePlayer

    在此播放器引擎实现中,MediaCodec 的输出为dequeued,并被推入队列,如here 所示。请检查第 439 - 450 行以获得完整的图片。

    一旦缓冲区可用,就会有一个简单的AV Sync 机制实现here。请参阅第 508 -521 行。在此示例中,仅考虑一个轨道,因此 nowUs 即当前时间源自 systemTimeALooper::nowUs

    在您的代码中,您可以考虑始终在first-come-first-serve 基础上呈现audio,对于您的video 轨道,您可以从audio 轨道派生 nowUs

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

    【讨论】:

    • @ManojK.. 链接androidxref.com/4.2.2_r1/xref/frameworks/av/cmds/stagefright/… 是一个工作示例,可以在android 平台上试用。请说明您是否正在寻找不同的东西。
    • 非常感谢,我希望有 java 中的任何示例代码。无论如何,我会尝试上述示例 n 让你保持发布。
    • 嗨 Ganesh,你提到了 In this example, only one track is considered,你能解释一下吗?我怀疑这至少考虑到音频和视频。
    猜你喜欢
    • 2016-04-25
    • 2016-03-12
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 2012-12-16
    • 2018-11-18
    相关资源
    最近更新 更多