Video streaming 为什么H265解码器在开始解码之前必须等待数十帧数据? 本文试图在H265编解码器的基础上,构建一个C++实时视频流应用程序。我的应用程序非常关心实时性能,我已经构建了一个单线程程序来测试H265编解码器。该计划有一个简单的管道: 抓住一个框架 馈送至编码器 将编码数据馈送到解码器 如果没有帧解码,则显示解码结果或输出通知

Video streaming 为什么H265解码器在开始解码之前必须等待数十帧数据? 本文试图在H265编解码器的基础上,构建一个C++实时视频流应用程序。我的应用程序非常关心实时性能,我已经构建了一个单线程程序来测试H265编解码器。该计划有一个简单的管道: 抓住一个框架 馈送至编码器 将编码数据馈送到解码器 如果没有帧解码,则显示解码结果或输出通知,video-streaming,codec,libavcodec,hevc,libx265,Video Streaming,Codec,Libavcodec,Hevc,Libx265,我尝试了X265/DE265组合,以及avcodec组合中的avcodec\u ID\u HEVC编码器和解码器,发现解码器在第一帧数据到达后不会“立即”解码的现象,在开始输出解码结果之前,它必须等待大约30帧的数据。情况是这样的: **encoding** **decoding** frame 1: succeeded -> no frame decoded frame 2: succeeded ->

我尝试了
X265/DE265
组合,以及
avcodec
组合中的
avcodec\u ID\u 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秒。我想知道为什么,是否有办法避免这种情况


谢谢大家!

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

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

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

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