分布式视频系统中编解码算法的核心指标

一、视频分布式的定义

分布式视频系统的概念是与集中式视频系统相对应的:分布式系统是音视频IP化的一种实现方案,是由若干个独立的功能节点通过网络分散组合而成,可以在空间部署上进行随意分布,各个节点通过网络实现互联。分布式系统包括三类节点:编码器、交换机、解码器,各类节点的数量不做限制,系统规模可以做到灵活的扩展。

二、分布式视频系统的种类

分布式视频系统的分类跟采用的编解码算法有直接的关系,常见的形态有以下几种:

(1)基于H.264/H.265的深压缩分布式方案,单路千兆电口可传输多路4K@60fps或者多路1080P,网络带宽往往不是系统的瓶颈,系统性能指标取决于编解码芯片的能力;能够兼容IPC码流和监控平台,能够支持完整的分布式功能;具有码率低、延迟大、画质相对较差的特点。

(2)基于JPEG2000或者VC2等浅压缩算法的浅压缩分布式方案,单路千兆电口能够最多传输两路4K@60fps或多路1080P,可以支持较丰富的分布式功能,例如两路视频的开窗、拼接等功能;具有码率大、延迟小、画质较高的特点。

(3)同时支持深压缩和浅压缩的双引擎方案,单路千兆电口能够最多传输两路4K@60fps或多路1080P,同时传输高画质视频流和低码率视频流,能够兼容IPC码流和监控平台,能够支持完整的分布式功能。跟前两个方案相比,主要特点是具有更强的覆盖性,满足更多的应用场景。

(4)基于SDVoE的分布式方案,极低延迟,极低压缩比,1路4K@60fps需要一路10G以太网线路来传输数据;不具备拼接、开窗等分布式产品的常见功能;具有超大码率、极低延迟、超高画质的特性。

上述四类主要的分布式产品类型,可满足不同场景下对视频分布式的需求,其中第一类深压缩分布式方案还是当前市场主流方案。方案2和4更多针对是局域网内,对画质有较高要求的场景。在局域网内,只经过交换机,不经过路由器(不跨域)的前提下,网络带宽虽然宝贵但成本还是可控的,在这种前提下,视频画质和延迟的权重会更大。这时,浅压缩分布式方案的价值就体现出来了,可以实现高质量视频的本地坐席交互。

三、视频分布式的编解码算法3个核心指标

分布式使用到的编解码算法主要包括两大类:深压缩算法(H.264/H.265)、浅压缩算法(JPEG2000、VC2等)。画质、码率、延迟是分布式方案中编解码算法的3个核心指标,其中码率和延迟还要区分峰值码率/平均码率、峰值延迟/平均延迟。一个好的编解码算法,最理想的情况是画质好、码率小、延迟低,不过这种最理想的情况是不存在的。一般情况下,画质好则意味着码率比较大,码率小则意味着画质差;延迟参数与画质、码率的关系会更复杂些,跟编解码算法的具体实现有关。在分布式中,图像编码后需要通过网络传输,从宏观上看,要按平均码率分配对应大小的网络带宽;从微观角度来看,即使平均码率和网络带宽是匹配的,当码率峰值超过分配的网络带宽时,就会引起网络拥塞,从而导致网络丢包或者网络延迟变大。例如,多路4K@60fps的H.264码流通过交换机的一个千兆接口汇聚到解码器,虽然他们平均码率之和没有超过千兆,但是如果他们在同一时刻都是在输出I帧,峰值码率的之和就有可能超过千兆,从而导致丢包;如果在编码器端限制输出的最大瞬时码率,虽然不会在交换机中丢包,但是I帧传输需要的时间就明显增加了。此外,在同一帧图内,按指定压缩倍数进行压缩时,如果要保证整帧图的画质一致,复杂区域编码后的字节数比简单区域编码后的字节数要多,那么在传输这帧图像时,复杂区域传输需要的时间比简单区域传输的时间要大,在一帧的时间范围内码率也是不均匀的。所以,需要合理的平衡画质、码率和延迟参数,来满足不同场景下的需求。下面介绍三种典型的编解码算法:H.264、JPEG2000、JPEG XS,通过对比它们三者的画质、码率、延迟参数的特性,来说明它们在分布式方案中的应用(JPEG XS很少用在分布式方案中,这里拿出来对比是为了更方便的说明不同编解码算法的特性)。

(1)H.264

深压缩以H.264为例,H.264包含I帧、P帧、B帧,同时包含3种码率控制方式:CBR, VBR, CVBR。其中 I帧表示关键帧,只用帧内压缩,压缩效果类似于JPEG,一般取7倍左右的压缩(视最终码率而定);P帧是前向预测编码图像帧,记录的是当前帧跟之前的一个关键帧(I帧或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面,一般可达到20倍压缩效果;B帧是双向差别帧,也就是B帧记录的是本帧与前后帧的差别,换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,可以达到50-200倍的压缩效果。其中,I帧使用的是帧内预测编码,P帧和B帧使用的是帧间预测编码。然后再介绍下三种不同的码率控制方式。在H.264的码率控制中有一个重要的概念是码率统计时间:在某个时间窗内统计和控制码率,这个时间窗口就是码率统计时间。CBR( Constant Bit Rate)固定比特率,即在码率统计时间内保证编码码率平稳,复杂图像时画质变差,简单图像时画质很好;VBR( Variable Bit Rate)动态比特率即允许在码率统计时间内编码码率波动,从而保证编码图像质量平稳;CVBR(Constrained Variable Bit Rate)兼顾了CBR和VBR的优点:在图像内容静止时,节省带宽,图像变化较大时,利用前期节省的带宽来尽可能的提高图像质量,达到同时兼顾带宽和图像质量的目的,这种方法通常需要设定最大码率和最小码率,静止画面时,码率稳定在最小码率,运动画面时,码率介于最小码率和最大码率之间。

图1 H.264编码器GOP的组成

介绍完I帧、P帧、B帧以及三种码率控制方式,那就来看看H.264编解码算法中画质、码率、延迟的关系。一般而言,一路1080P@60经过H.264编码后的码率是20Mbps,要达到接近150倍的压缩效果,需要在一个GOP ( Group of Pictures )序列中插入大比例的B帧和P帧,因为只有B帧才有200倍的压缩效果。以I帧和P帧插入2个B帧为例,解码显示时第一个B帧需要等待后面的P帧解码后才行解码,所以B1从在编码端输入到在解码端显示时至少会有4帧的延迟(等待P帧的延迟2帧+P帧编码延迟1帧+B1帧的编码延迟0.5帧+B1帧的解码延迟0.5帧),也就是接近67ms的延迟。再来看看看码率的对画质和延迟的影响。一般码率统计时间的单位是1秒,CBR固定比特率是指每个码率统计时间内的总码率是固定的,但不保证一个码率统计时间内的峰值码率是否会超过平均码率的。假设码率统计时间刚好就是1秒,那么一秒内有若干I帧、P帧、B帧,虽然平均码率没有超过20Mbps,但是I帧发送的时候,如果按7倍压缩来算,瞬时码率可能是接近400Mbps。当然,系统可以在编码器外限制网络输出的瞬时峰值,例如限制在100Mbps。不过这又带来另外一个参数恶化,即需要4帧的时间才能传完I帧的数据,整个编解码系统的瞬时延迟增加了3帧。在VBR和CVBR模式下,复杂图片时会分配更多的码率,同样的I帧,码率比在CBR模式下I帧的要大的多。因此,在VBR和CVBR模式下码率波动会比在CBR模式下更大,引入更多的网络带宽抖动和延迟。由上面的分析可以得出结论:想得到更好更稳定的画质,在平均码率不变的情况下,付出的代价是码率的波动和延迟的增加。H.264编解码算法在少量码率的情况下(20Mbps)确实足以获得非常清晰的画质,但是延迟大且存在波动,平均码率虽小但是峰值码率可不小。对于分布式产品而言,在KVM应用中延迟是至关重要的参数,延迟太大操作鼠键都会带来明显的滞后,体现感很差;另外分布式产品一个核心组件就是交换机,交换机对于瞬时网络带宽的波动是很敏感的,交换机内部的缓存一般只能缓存几十us级别的流量突发,H.264的峰值码率会导致多路视频流汇聚时总带宽超过千兆口的最大带宽,从而出现丢包,而多路视频在解码器端拼接、开窗也是分布式产品核心功能之一。

在某些分布式产品中,会将H.264只配置I帧和P帧。使用P帧会增加多1帧的延迟,端到端延迟一般在2帧左右;如果不使用P帧,仅使用I帧,则跟浅压缩算法几乎无异了。只不过当前市面上的H.264解决方案大多使用的是海思或者瑞芯微等厂商的AISC芯片,一般只支持YUV422编码,不支持YUV444;另外从帧内编码效果来讲,H.264也不如JPEG2000等专门的浅压缩算法。

(2)北格JPEG2000

JPEG2000是浅压缩算法,只采用帧内压缩。编码过程的核心步骤是:1、在水平和垂直方向对称的进行多级9/7小波变换,级数越多越有利于压缩,但是延迟越大;2、量化;3、进行位平面编码和MQ编码,为码率控制做准备;4、在考虑目标码率和整幅图最小画质损失的情况下,确保每帧图像的码率是恒定的(可以理解成码率统计时间是1帧周期的CBR),以CB为单位进行截断,实现码率控制。按照标准推荐的处理流程,JPEG2000的编解码总延迟是1帧(基于完整帧的信息做最佳码率控制)+若干行(取决于小波的级数以及CB的大小),整张图片码率可以做到精准控制,得到指定码率下的最佳画质。所以,从帧内压缩效果来讲,相同码率下,JPEG2000是强于H.264的I帧的,当然JPEG2000的计算量也要比H.264的I帧大。北格逻辑的JPEG2000算法,整体流程上跟JPEG2000标准保持一致,但为了让延迟更小,而且收到图像的一部分后就开始编码,通过预测算法评估出小波变换后每个子带上数据量的分布,从而得出最佳的码率分配方案,为图像的每一部分分配合适的码率。因此,在画质保持不变的情况下,可以做到编码器到解码器的总延迟小于半帧(即9ms以内的延迟)。同时,北格逻辑的JPEG2000算法在打包输出时,严格控制了输出码率峰值,将码率统计时间设置在50us左右,每个码率统计时间内的总输出字节数是一样的,即使在码率统计时间范围内出现突发,也是在交换机能够缓存的范围内,因此不会出现丢包。总延迟设定为半帧,也是充分考虑了图像数据量的不均匀性,是在解码器收到足够多的数据后才开始输出。

(3) JPEG XS

JPEG XS是JPEG2000的简化版,跟JPEG 2000相比,主要有两方面的简化:1、把9/7小波换成5/3小波,以及简化垂直方向的小波计算(最多2次垂直方向的小波计算),这样做的好处是减少计算的延迟,需要等待更少的行数就可以进行编解码;2、简化了码率控制机制,采用dead-zone和均匀量化的方式对CG(编码组)进行码率控制,不需要考虑整个图像在小波之后的数据分布情况。因此,JPEG XS可以做到编解码总延迟在32行内,而且整帧图像码率输出是绝对均匀的。至于画质,在6倍以内基本视觉无损,不过如果一幅图图像包含简单区域和复杂区域的话,那复杂部分的画质损失比简单画面部分损失要大。可以看到的是,JPEG XS的码率控制方式是保证绝对的均匀,所以码率在微观时间粒度下(us级别)也是均匀的,可以理解成是码率统计时间是一个CG的CBR码率控制方式;同样的,由于不存在码率波动,延迟也是非常固定的。所以,JPEG XS适用的范围是6倍以内的压缩,基本上是靠熵编码和微幅对的量化,可以实现视觉无损,同时有着绝对稳定的码率和延迟,在广播电视制作传输域得到广泛的应用。

图2 一秒时间内3种编解码算法的瞬时码率波动示意图

(4) 对比总结

从上述描述可知以下结论:

H.264的码率控制即使在CBR模式下,也仅仅能做到在码率统计时间内总码率是恒定的,码率统计时间单位一般是1s(即最小码率统计时间是1秒);JPEG2000的码率控制能够保证每一帧的总码率是恒定的;JPEG XS能够保证在一个编码组内的总码率是恒定的。所以从码率波动和延迟波动来看,从好到差依次为:JPEG XS>JPEG 2000 > H.264。

从有效的压缩倍数来看,在保证一定画质的前提下,H.264能到达到150倍,JPEG2000能达到25倍左右,JPEG XS能够达到6倍。压缩倍数角度,H.264>JPEG2000>JPEG XS;在上述画质下,JPEG XS>JPEG 2000>H.264。

从延迟的绝对值来看,JPEG XS最小(约32行),JPEG 2000(标准版本一帧+,北格逻辑版本半帧),H.264在打开I帧和P帧的情况下是4帧以上。

H.264的优势是压缩倍数大,缺点是延迟大画质略差;JPEG 2000是一个画质能做到视觉无损且延迟小,缺点是码率比较大;JPEG XS是作为夹层编码,侧重于高画质和低延迟,缺点是码率非常大,所以几乎不用于分布式产品中。

图3 三种算法核心技术指标对比

四、其他

在分布式产品中,关于编解码端到端延迟的定义,以HDMI输入/输出为例:HDMI输入-编码-网络传输-解码-HDMI输出,这个完成处理流程的延迟即为端到端延迟。需要注意的是:分布式产品一般要求切换视频源时不黑屏,而HDMI输出是有帧结构的,在不黑屏的情况下切换视频源,新的视频即使解码完可以输出了,也要等到下一个HDMI帧头处才可以开始输出。所以不黑屏的情况下切换视频源,端到端的延迟要在原来的延迟基础上再增加0-1帧的时间,具体增加的时间取决于新视频源跟HDMI输出帧的相位关系。

图4 HDMI帧周期对视频分布式延迟的影响

五、写在最后

北格逻辑基于自主研发的JPEG2000 IP,针对分布式视频应用场景做了深度优化,在25倍压缩下视觉无损,延迟控制在半帧,且码率抖动小,非常适合浅压缩应用,更多详情敬请关注北格逻辑:www.berglogic.com

本文转载自:北格逻辑

最新文章

最新文章