Video streaming x264速率控制

Video streaming x264速率控制,video-streaming,x264,bitrate,Video Streaming,X264,Bitrate,我们正在视频会议项目中使用x264编码器,基本的流式视频工作正常,但是,我们很难理解各种速率控制设置如何确定最终比特率。 我们设置了以下参数: x264_param_t params; x264_param_default_preset(&params, "ultrafast", "zerolatency"); params.i_threads = 1; params.i_width = width; params.i_height = height; params.i_fps_num

我们正在视频会议项目中使用x264编码器,基本的流式视频工作正常,但是,我们很难理解各种速率控制设置如何确定最终比特率。 我们设置了以下参数:

x264_param_t params;
x264_param_default_preset(&params, "ultrafast", "zerolatency");
params.i_threads = 1;
params.i_width = width;
params.i_height = height;
params.i_fps_num = fps;
params.i_keyint_max = fps;
params.b_intra_refresh = 1;
params.b_repeat_headers = 1;
params.b_annexb = 1;

//Set rate control stuff here

x264_param_apply_profile(&params, "baseline");

如果我们只设置params.rc.i_bitrate param,编码器似乎会大大超出比特率。如果我们设置i_vbv_max_比特率和i_vbv_buffer_大小参数,我们会看到一个比特率峰值(有时超过)i_vbv_max_比特率设置。显然,严格控制比特率对于视频会议很重要,但文档有点不透明。还有人在使用x264进行视频会议吗?你如何设置编码器?感谢您的帮助。

如果您处于低延迟视频会议模式,以获得最小的抖动和可靠的性能,您需要处于CBR模式,而不是VBR模式。正是VBR模式提供了实时低延迟系统无法处理的上升和峰值

有专门用于低延迟视频通信/监视应用的vbr算法,但x264没有。所以不要使用它的vbr。其vbr用于存储

有一个--nal hrd cbr来启用cbr

你无法保证比特率不会超过一个点,因为事情是统计的。但是,只要满足某些假设,您就可以在99%的时间内对其进行控制

您的vbv缓冲区大小必须是从质量角度来看可以处理的最小大小,这有两个目的 1.不允许比特率有太大的变化 2.减少端到端延迟 这是编码器假设在解码器端可用的缓冲区。它越小,质量越差。找到你能处理的最小值

vbv最大比特率需要设置为cbr目标比特率值。这是rc的指南,即这是允许的最大瞬时比特率。将其设置为目标比特率。记住这是一个指导方针。由于视频的统计特性,它可能会被忽略

确保您有帧内刷新,因此I图片已关闭

如果不覆盖某些设置,Ultra fast可能不是一个好的预设。明确设置参考图片、b图片和个人资料。 将me和SUME设置为更高级别。[如果我是你,最高级别]。这是你被拍到的原因之一。因此,编码器无法正常工作。当编码器有更好的me和SUMBE时,它需要更少的比特来编码发生爆炸的硬部分!一般来说,不懂视频的人不会明白这一点。他们一直在问为什么我/我对比特率和射击很重要。相信我。当编码的困难部分出现时,你能得到多少的提升完全取决于编码器的算法,而me是其中一个关键因素

查看您需要使用的配置文件。Cabac提供高达20%的改善。所以,如果你能做主配置文件,就做吧。仅使用1张参考图片,不使用B图片。但是,如果您可以使用cabac,那么使用cabac获得比特率优势绝对没有坏处

编辑:
一般来说,没有神奇药丸。以上是多年从事多媒体和理解视频工作后得出的建议。然而,您仍然需要在质量/延迟和特定于您的系统的其他约束之间找到最佳设置。在调整这些术语之前,请确保您理解它们,否则您将永远处于循环中。还要记住视频是统计的。没有什么事情是永远完美的

对不起,我听不懂你的回答。首先,您说我们应该处于“CBR”模式(我假设它代表“恒定比特率”),从设置POV来看这是什么样子?但是,然后讨论如何设置VBV缓冲区大小,这难道不是一种固有的VBR模式吗?抱歉,如果我不理解这一点…没有VBV缓冲区大小与VBR无关。它也适用于CBR。给你:很酷,这就解释了VBV。那么,如何在x264参数中设置CBR与VBR?这是params.rc.i_比特率设置吗?正如我在开头的--nal hrd中解释的那样。还显式地将最大比特率设置为目标比特率。