首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么H265解码器必须等待数十帧数据才能开始解码?

为什么H265解码器必须等待数十帧数据才能开始解码?
EN

Stack Overflow用户
提问于 2019-01-23 20:10:59
回答 1查看 919关注 0票数 0

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

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

我尝试了X265/DE265组合,AV_CODEC_ID_HEVC编解码器在avcodec组合中,发现了一种现象,即解码器在第一帧数据到达后不会立即解码,它必须等到大约30帧数据后才开始输出解码结果。情况如下:

代码语言:javascript
复制
              **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秒。我想知道为什么,如果有办法可以避免的话。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-27 10:12:12

一个原因可以是在B片中进行前向引用。

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54334922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档