2

我们在视频会议项目中使用 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 参数,编码器似乎大大超过了比特率。如果我们设置 i_vbv_max_bitrate 和 i_vbv_buffer_size 参数,我们会看到一个比特率达到峰值(有时超过) i_vbv_max_bitrate 设置。显然,严格控制比特率对于视频会议很重要,但文档有点不透明。还有其他人使用 x264 进行视频会议吗?你是如何设置编码器的?任何帮助表示赞赏,在此先感谢。

4

1 回答 1

6

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

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

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

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

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

vbv 最大比特率需要设置为 cbr 目标比特率值。这是 rc 的指导方针,这是您允许的最大瞬时比特率。将其设置为目标比特率。请记住它的指导方针。由于视频的统计性质,它可能会被过度拍摄。

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

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

查看您需要使用的个人资料。Cabac 提供高达 20% 的改进。因此,如果您可以做主要配置文件,那就去做。仅使用 1 张参考图片,不使用 B 图片。但是,如果可以使用 cabac 来获得比特率优势,那绝对没有什么坏处。

编辑:一般来说,没有神奇的药丸。以上是多年从事多媒体工作和理解视频所获得的建议。但是,您仍然需要进行一些尝试才能在质量/延迟和特定于您的系统的其他约束之间找到最佳设置。确保您在调整它们之前理解这些术语,否则您将永远在圈子里跑来跑去。还要记住视频是统计的。没有什么是永远100%完美的。

于 2012-08-31T20:14:20.747 回答