【问题标题】:android mediacodec: real time decoding h264 nalsandroid mediacodec:实时解码 h264 nals
【发布时间】:2013-04-25 17:45:17
【问题描述】:

我正在尝试使用 android 低级媒体 api 实时解码 h264 nals。
每个 nal 都包含一个完整的帧,所以我希望在用我的 nal 输入输入并调用 dequeueOutputBuffer 后,它会“立即”(当然会有一点延迟)显示我的帧,但它不会。我看到第一帧,出队仅在向解码器提供第二个缓冲区后才返回第一个缓冲区,此时应该呈现第二帧。帧使用 x264 的 zerolatency 预设编码,因此没有 b 帧等...

我想可能有一种方法可以将编码器设置为在得到帧后立即渲染帧,但我找不到任何好的文档/解释。 有什么建议吗?

【问题讨论】:

  • 我遇到了同样的问题。我目前的理论是 H.264 似乎缺少任何类型的“帧结束”标记。因此,解码器必须等到它有下一帧的数据才能完成解码并显示当前帧。对我来说,它只增加了大约 25 毫秒,但我想恢复 25 毫秒。
  • 我有同样的问题,即使是 I-Frames。但我仍然没有解决方案。您是否成功实现了“实时”渲染?
  • @soccertrash,你成功了吗?

标签: android real-time media h.264 codec


【解决方案1】:

仅仅因为帧以零延迟设置编码并不意味着它们将以零延迟解码。两个分开的东西。因此,根据编解码器级别(分辨率、比特率、帧率)和配置文件,您可能必须解码多达 16 帧的 h264 视频才能获得一帧。

【讨论】:

  • 感谢您的回答,但根据我的测试,当解码器与下一个解码器一起馈送时,帧会显示,无论这两个之间的延迟(20 毫秒或 10 秒不会改变),所以这与解码时间无关,但似乎是api的限制。
【解决方案2】:

只有在前帧解码后才能解码 p 帧

【讨论】:

    猜你喜欢
    • 2021-08-30
    • 1970-01-01
    • 2014-02-06
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多