OBS-推流编码参数的设置(质量、带宽和计算负荷相关 二)

接上一篇。
  三.码率
  码率是单位时间内编码器产生的数据量。由于H264编码的压缩特性,编码器产生的码率并不是完全等于我们设定的码率。如前所述,码率控制的方式不同,实际码率会有很大的不同,特比是在vbr模式下,如果是静止画面,即使我们设定的目标码率为5M,实际码率可能只有几十K。而对于剧烈运动的场景,码率可能会升至7M+。
  在其余参数相同的情况下,我们设定的目标码率对计算资源的影响不大,比如设定的目标码率为8M和10M相比,CPU的使用率可能基本感觉不出什么变化,当然这也和我们CPU本身的计算能力有关。归结起来就是,目标码率越高,对计算资源要求越高,但该影响不明显。
  码率对视频质量的影响是显而易见的,在其余条件相同的情况下,码率越高,画质质量会越好,这是由于更高的码率携带了更加丰富的视频信息,越能呈现更丰富的细节。
  在实际项目中,我们最要关心的是码率对带宽的影响。OBS中设置的目标码率是编码器编码后的数据率,实际上由于传输中还牵涉到源端和目标端的信息交互、信号重传、协议开销等等,所以实际占用的带宽会比编码器产生的数据率高。推荐申请的运营商接入带宽不能低于目标码率的2倍。如果当地的网络资源不稳定,波动较大的话,那么申请的运营商带宽还应该提高。
  一旦实际码率高于带宽,就会出现丢帧现象。编码器生成的码字会存放在缓存(cache)中,再通过网络传输到目标端,缓存是编码器申请的一块内存空间。
OBS-推流编码参数的设置(质量、带宽和计算负荷相关 二)
网络传输的速度小于编码器产生码字的速度时,缓存会被逐渐填充满而导致溢出,产生丢帧现象。
  四.关键帧间隔
  在H264编码中,图像会进行分组,每一组叫一个GOP序列,在一个GOP序列中的第一帧是关键帧,关键帧的特点是只要接收端接收到了该帧的数据,就可以还原这一帧的完整画面,该序列中的其余帧是参考关键帧进行了数据压缩,这些帧的数据本身是不完整的,需要借助关键帧的信息才能完整还原这些帧的图像信息。
  关键帧间隔越大,也就是GOP越长,数据压缩越大,实际码率就会越低。但GOP太大会导致画质变差,特别是在运动画面中最为明显。所以我们不建议GOP设置太长,以确保画面质量,默认情况下可以设置为0,即系统自动设定。如果自己设置,可以考虑在半秒到2秒之间,比如我们的帧率FPS=30,那么关键帧间隔可以设置在15~60之间。
  五.CPU使用预设
  这是指在使用X264编码时,对CPU运行能力的要求。
OBS-推流编码参数的设置(质量、带宽和计算负荷相关 二)
  从下拉框中我们可以看出一共分从了10级,即从最下面的placebo到最上面的ultrafast。级别越靠上,CPU处理的数据量越小,编码时对CPU的处理能力要求越低,但画质会越来越差。该参数对CPU的影响非常大,即使是从faster到fast一个级别的变化,CPU的运行量可能就会翻倍。一般可以选择在fast~veryfast级别之间,平衡画质与CPU的负载。
  未完待续。