【问题标题】:Why does H265 decoder has to wait for tens of frames of data before start decoding?为什么H265解码器要等几十帧数据才能开始解码?
【发布时间】:2019-06-17 11:55:10
【问题描述】:

我正在尝试使用基于 H265 编解码器的 C++ 构建实时视频流应用程序。我的应用程序非常关心实时性能,我构建了一个单线程程序来测试 H265 编解码器。该程序有一个简单的管道:

  1. 抓一帧;
  2. 馈送到编码器;
  3. 将编码数据输入解码器;
  4. 如果没有帧解码,则显示解码结果或输出通知。

我试过X265/DE265组合,avcodec组合中的AV_CODEC_ID_HEVC编解码器,发现第一帧数据到达后解码器不会“马上”解码的现象,而且有等到大约 30 帧数据才开始输出解码结果。情况如下:

              **encoding**       **decoding**
frame 1:      succeeded      ->  no frame decoded
frame 2:      succeeded      ->  no frame decoded
frame 3:      succeeded      ->  no frame decoded
...
frame 30:     succeeded      ->  no frame decoded
frame 31:     succeeded      ->  frame 1 outputted
frame 32:     succeeded      ->  frame 2 outputted
...

这将导致编码器延迟 1 到 2 秒。我想知道为什么以及是否有办法避免这种情况。

谢谢!

【问题讨论】:

    标签: video-streaming codec libavcodec hevc libx265


    【解决方案1】:

    一个原因可能是 B 片中的前向引用。

    例如,通过选择大小为 32 且具有层次结构的图片组 (GOP),您可能会施加大约 1 秒的解码延迟(假设为 25fps)。

    更准确地说,您的第二帧(第一帧是 Intra,因此可独立解码)的重建可能间接取决于您的第 32 帧。

    这种编码方式通常称为随机存取。查一下。您可以通过使用 LowDelayP 模式来避免它。或所有内部。 换句话说,延迟取决于您的 GOP 结构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多