一、概述
随着网络视频服务器的越来越普及,随着全球眼,平安城市等项目的全面开展,在视频监控行业中,通过网络来传输视频已经成为发展趋势。通过网络来传输视频,不仅可以利用网络的资源将视频图像传输的更远,从而不受距离限制;同时,网络的应用给视频监控带来了更多新颖的功能,完全可以达到各种用户专业化监控的要求。可以预见,未来的视频监控一定是网络化的视频监控,这应该是不可逆转的潮流。
在当前的网络条件下,很多用户发现网络视频服务器在通过网络传输视频信息时经常遇到带宽过低或者带宽不稳的问题,导致视频在这样的带宽条件下无法正常的传输连续的视频图像,用户在浏览视频图像时感觉画面停顿感、滞后感非常强烈,无法达到其监控要求。
也许你也遇到过这样的问题,当你把网络视频服务器放在Internet网上时,图像画面非常卡,非常不流畅,可能几秒画面才动一下,或者画面干脆很长时间不动了。在这样的环境下你使用网络视频服务器根本无法达到你的监控要求。
也许你还会遇到这样的困惑,你已经搭建了2M带宽的网络,一开始时你可能只是想搭建一个企业内部网,开展一些网页浏览的业务,之后你可能增加了内部下载等业务,再之后你可能在你的企业网里增加了流媒体点播的业务,同时还增加了网络视频会议等业务,最后,你决定增加网络视频监控的业务。这所有的业务同时运行在你2M带宽的网络上,有时你发现视频很流畅,有时你又发现视频非常卡无法正常浏览。这时,即使你人为的降低视频服务器的比特率,仍然无法得到流畅的图片。这是因为如果在2M带宽下只运行一个业务带宽是充裕的,但是当某一时刻所有业务一起运行起来,所有业务对带宽需求的总和一定超过2M带宽,从而每个业务在实际使用中分得的带宽就不够了。这时你就会发现有些时段视频图像非常流畅,有些时段视频图像就非常的卡了。
也许你早期使用过MJPEG编码方式的视频服务器,你现在已经升级到MPEG4或者H.264编码方式的视频服务器了,如果你的网络状况并不充裕,就像上面描述的情况一样。那么,你会发现,H.264或者MPEG4编码方式的视频服务器的视频流畅性反而不如MJPEG编码方式的视频服务器的流畅性。尽管所有的厂商都告诉你H.264或者MPEG4占用更低的带宽,拥有更好的图像质量,但是在你的网络状况中的表现却不是这样。
二、问题分析
以上所有的问题都来自于网络,网络带宽过低或者网络带宽不明确且不稳定影响了视频浏览,我们将以上的现象归为如下两大类问题:
一、网络带宽过低导致网络视频服务器不流畅
该情况多发生在使用ADSL等设备通过Internet网传输视频监控业务。大多数用户ADSL的上行带宽可能只有512K或者更小,在Internet实际传输带宽往往大大小于512K,在使用网络视频服务器进行网络视频监控业务时视频图像非常不流畅,用户不得不不断的降低视频服务器bitrate值,以满足传输实际带宽的要求,同时又要保证有比较好的图像质量,往往这些调节工作对客户来说操作起来很麻烦。
二、网络带宽不明确且不稳定导致视频服务器不流畅
正如上面举例的第二种情况,表面上看有2M足够的带宽,但是实际使用中由于业务太多超出带宽容量,导致视频带宽不够。这种情况是带宽不明且不稳定的情况,适合于一些较早建设的网络。早期很多网络是按照2M的光纤进行建设的,在2M光纤上进行多种业务的操作,比如公司内部网页访问、内部下载、内部邮件、内部视频点播等业务都在这2M光纤业务上。在增加了网络视频监控业务后,仍然在原有的2M光纤上所有业务,这时就会发现视频图像浏览非常不了流畅,几秒甚至十几秒才能动一下,无法满足正常监控业务的要求。这时用户开始尝试把视频服务器的比特率不断调低,最终发现无法找到一个合适的值来使图像达到流畅。因为由于业务太多且杂,没有人能够实时的知道当前带宽到底是多少?视频服务器的比特率到底设置在多少合适?该现象尤其在Internet网上进行视频监控业务时也非常突出。
大家不禁要问,明明H.264或者MPEG4的压缩算法先进了很多,更大的降低了码流;但是,为何在低带宽下的表现反而不如人意呢?
这要从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,而完全是由于我们没有针对这样的网络环境中进行优化,任何一个好的算法,在实际应用中也是要根据应用场景进行相应的优化处理,这样的优化大部分是针对网络传输来进行的。我们可以从以下三个方面入手来解决问题。
一、增加编码过程中I帧出现的几率。
在MPEG系列编码算法中,通常用GOP(GROUPOFPICTURE)这一值来设置I帧产生的间隔,比如当GOP设置为30时,就表示每30帧产生一个I帧。I帧通常占用数据量都很大,很多编码器将GOP设置为120或者更高,这样可以较少I帧出现的概率,从而降低码流;但是带来的后果就是当网络带宽不够,丢掉一个I帧,那几秒内无法再正确解码数据帧直到接收到下一个I帧,导致画面长时间停滞。经过我们长期的测试,在低带宽的情况下GOP的值调整为5比较合适,这样1秒钟能够产生5个I帧,即使偶尔丢掉了一个I帧,下一个I帧也能很快弥补上,图像不至于长时间的停滞。
二、实时检测网络带宽
视频服务器要智能的对带宽进行实时检测和控制,我们可以通过应答机制等方法掌握当前实际的网络带宽是多少,这个是完全可以通过嵌入式软件来实现的。只要能实时的掌握带宽,就可以对编码器的策略和发送策略进行实时调整。针对不同的带宽采取不同的编码策略和发送策略,从而最大利用带宽进行视频传输。
三、优化发送策略,增加I帧发送几率
当嵌入式软件检测到当前带宽不够的时候,传输模块应智能的调整发送策略,增加I帧的发送几率。除了通过降低GOP的值增加I帧的产出几率,同时在网络发送策略上确保I帧能够发送成功,如可以采用带有重发机制的协议确保I帧不会在网络上丢失。这样,可以增加有效帧对带宽的占用,减少无效帧对带宽的耗费。
上海卓扬科技有限公司在其H.264全系列产品中进行了发送策略的充分优化,经过详尽的测试,在各种带宽下进行对比测试,通过上面手段改进过的发送策略使H.264视频服务器在低带宽或者不明带宽下不仅提升了图像质量,同时浏览的流畅度大大提高,可以智能的根据带宽自动调节以保持非常好的流畅性,同时,低带宽下实时性也大幅提高。