这要从MPEG系列压缩算法的核心分析了。MPEG系列压缩算法从早期的MPEG-1,MPEG-2发展到现在的MPEG-4以及最新的H.264,其核心压缩原理没有变化。MPEG系列压缩算法都在时域上对视频流进行压缩。与MJPEG压缩每一帧都是单独JPEG图的方式不同,MPEG系列压缩算法采用了I帧,P帧和B帧的模式,当前大部分压缩芯片或者压缩算法并没有实现B帧。大家不必过分关心I帧,P帧的细节,只需要知道在这三种帧模型里,I帧是关键帧,P帧是前向预测帧,B帧是后向预测帧。当解码器收到一个I帧的时候,可以立刻进行解码,而不需要其它条件;但是,当解码器收到P帧或者B帧的时候,就不能够立刻进行解码,比如,P帧的解码需要解码器先解码该帧前面的P帧或者I帧。如果前面的P帧或者I帧在网络中丢掉,即使后面连续收到很多P帧,也无法正常解码。举个例子,在带宽不够的情况下网络丢掉一个I帧,即使随后的P帧都收到,仍然无法正确解码出图像。这就是为什么低带宽下MPEG4或者H.264压缩算法表现还不如MJEPG的原因。MJPEG每一帧都是独立的帧,只要网络传送一帧,就可以解码出一副图片。在带宽不够的情况下,MJPEG每秒可能只能传送3、4帧,但是,用户已经可以在这1秒钟内看到3、4副画面了;对H.264来说,由于自身码流本身比较低,可能在低带宽下1秒能够传送15、16帧,但是,如果I帧在网络上丢失了,即使连续收到15帧P帧也无法正常解码出一副图片,这时给用户的直观感觉画面长时间停滞,低带宽下H.264居然比不上MJPEG。
三、解决方案
出现上面的问题的原因并不是由于H.264压缩算法不如MJPEG,而完全是由于我们没有针对这样的网络环境中进行优化,任何一个好的算法,在实际应用中也是要根据应用场景进行相应的优化处理,这样的优化大部分是针对网络传输来进行的。我们可以从以下三个方面入手来解决问题。
1、增加编码过程中I帧出现的几率。
在MPEG系列编码算法中,通常用GOP(GROUP OF PICTURE)这一值来设置I帧产生的间隔,比如当GOP设置为30时,就表示每30帧产生一个I帧。I帧通常占用数据量都很大,很多编码器将GOP设置为120或者更高,这样可以较少I帧出现的概率,从而降低码流;但是带来的后果就是当网络带宽不够,丢掉一个I帧,那几秒内无法再正确解码数据帧直到接收到下一个I帧,导致画面长时间停滞。经过我们长期的测试,在低带宽的情况下GOP的值调整为5比较合适,这样1秒钟能够产生5个I帧,即使偶尔丢掉了一个I帧,下一个I帧也能很快弥补上,图像不至于长时间的停滞。
2、实时检测网络带宽
视频服务器要智能的对带宽进行实时检测和控制,我们可以通过应答机制等方法掌握当前实际的网络带宽是多少,这个是完全可以通过嵌入式软件来实现的。只要能实时的掌握带宽,就可以对编码器的策略和发送策略进行实时调整。针对不同的带宽采取不同的编码策略和发送策略,从而最大利用带宽进行视频传输。
3、优化发送策略,增加I帧发送几率
当嵌入式软件检测到当前带宽不够的时候,传输模块应智能的调整发送策略,增加I帧的发送几率。除了通过降低GOP的值增加I帧的产出几率,同时在网络发送策略上确保I帧能够发送成功,如可以采用带有重发机制的协议确保I帧不会在网络上丢失。这样,可以增加有效帧对带宽的占用,减少无效帧对带宽的耗费。
上海卓扬科技有限公司在其H.264全系列产品中进行了发送策略的充分优化,经过详尽的测试,在各种带宽下进行对比测试,通过上面手段改进过的发送策略使H.264视频服务器在低带宽或者不明带宽下不仅提升了图像质量,同时浏览的流畅度大大提高,可以智能的根据带宽自动调节以保持最佳流畅性,同时,低带宽下实时性也大幅提高。
上一页 [1] [2] 下一页