老U也算是小半个专家了,他首先怀疑是网络带宽不足,算了算,一台高清网络摄像机占8Mbps的带宽,交换机之间百兆互联,可以接入100/8=12.5台网络摄像机,总共接入了12台,如图1-31所示。带宽分明足够了啊,这到底是怎么回事呢?
图1-31 码流突发导致丢包组网图
老U找来网管,网管胸有成竹地笑了笑:这个问题嘛,找我来就妥了。网管看老U对IP监控挺有兴趣,于是先给老U普及了几个与网络和视频监控相关的基本概念。
网口双工模式
双工模式分为全双工和半双工。全双工是指接口在发送数据的同时也能够接收数据,两者同步进行;而半双工是指一个时间段内只有一个动作发生,即接口某一时间段只接收报文或只发送报文。例如,一条东西走向的宽阔马路,可允许两辆马车迎面通过,当马车A自东向西行驶,马车B自西向东行驶时,两车可以同时行进,互不影响,这个例子中宽阔的马路代表的就是全双工链路。又如,一根独木桥,同时只能允许一个人通过,当有甲、乙两人从河岸两端迎面走过来时,就只能是一个人在桥头先停下来,等待另外一个人走过来后,再继续走过去,这个例子中独木桥代表的就是半双工链路。全双工相对于半双工的好处在于改成延时小,速度快。当数据流量较大时,工作在半双工模式的链路就会出现冲突、错包,最终影响工作性能,因此半双工已经逐步退出历史舞台。
网口速率
网口速率决定了网口传输数据的带宽,一般IPC的网口有10Mbps、100Mbps、1 000Mbps等速率类型。不同速率的网口也是可能对接成功的,其工作速率最终需要协商一致。例如,100Mbps自协商网口和10Mbps自协商网口对接,协商出来的工作速率是10Mbps。这个例子也可以看出,网口速率不一定就是其工作速率,一般工作速率会小于或等于网口速率。
自协商
自协商功能是给互连设备提供一种交换信息的方式,使物理链路两端的设备通过交互信息自动选择同样的工作参数(包括双工模式和速率),从而使其自动配置传输能力,达到双方都能够支持的最优值。工程实施中尽量采用两端均为自协商的方式,否则可能导致数据传输丢包。例如,一端配置成全双工,一端配置成自协商,由于配置成全双工一端无法提供传输能力给自协商一端,配置成自协商的一端其自协商的结果为半双工,两端的双工模式不一致会导致丢包。
帧率
一帧就是一幅静止的画面,连续的帧就形成动画,如电影等。我们通常所说的帧数就是在1秒里传输的图片数,通常用fps(Frames Per Second)表示。每一帧都是静止的图像,快速连续地显示帧便形成了运动的假象。高帧率可以得到更流畅、更逼真的动画。每秒钟帧数(fps)愈多,所显示的动作就会愈流畅。一般来说,图像帧率设置为25fps已经足够,这时每帧的间隔大约是40ms(人眼观看影像时,会产生视觉延迟。人眼的视觉延迟感应时间为40ms,如果图像与图像之间的间隔小于40ms,人眼就会认为画面是流畅的)。帧分为I帧(采用帧内压缩算法,关键帧,可单独解码出图片)、P帧(帧间压缩,表示与前面帧的变化量,无法独立解码,需要参考其他帧解码)和B帧(双向预测帧间压缩,无法独立解码,需要参考其他帧解码),如图1-32所示。由于信息的压缩,代表相对于前一帧的变化量的P帧信息会有损失,所以通常每秒会生成一个I帧,以保证视频的还原效果。
图1-32 码流I帧、P帧和B帧示意图
码率
码率是指视频图像经过编码压缩后在单位时间内的数据流量,是视频编码中画面质量控制中最重要的部分。我们平时说的码率是指每秒平均传输的视频比特数量。但由于帧是每隔一定时间发送的,例如每秒25帧,每帧间隔40ms,所以,在发送视频帧的那一小段时间内的码率是远大于平均码率的,特别是I帧出现的时候。
VBR
VBR(Variable Bit-Rate)即变比特率,通常,在清晰度相当的情况下,复杂场景的I帧会比简单场景的I帧尺寸大一些,场景变化剧烈的P帧会比场景变化缓慢的P帧尺寸大一些。VBR在保证平均码率的要求下,可以根据场景和线路的状况动态变更码率,从而获得最优的压缩质量。
CBR
CBR(Constant Bit-Rate)即恒定比特率,VBR保证了视频图像的综合清晰度,但是码率起伏较大,在网络传输时容易造成流量拥塞而丢包。CBR保证码率的均匀性,起伏不会太过剧烈,从而尽量避免了流量拥塞的出现,但CBR会影响复杂场景和剧烈变化场景的图像清晰度。
实时性优先和流畅性优先
实时性优先,指编码端相对及时地发送承载视频的IP包,解码端相对及时地解码视频流,从而保证视频观看的低延时;但由于广域网传输环境的复杂,会导致部分IP包延迟较大,从而导致视频图像的卡顿。流畅性优先时,编码端会尽量均匀地发送承载视频的IP包,解码端也会适当缓存一段时间再进行解码播放,这样可以有效地保证视频解码的流畅性;但也会增加解码的延迟。
很多人以为丢包一定是由于带宽不足所导致的(不考虑误码、线路故障等因素),其实不全是这样。如果有一条大河,上游有很多支流,这条河得挖多宽才能保证下游不会洪水泛滥呢?答案无解,因为极端天气很多,一场暴雨,也许水面就超过警戒线了。一种解决办法是建设蓄水坝,只要河的流量在全年平均降水量的基础上适当考虑冗余,那么暴雨短时间产生的水量可以由蓄水坝存储起来,雨停后水坝水量自然下降,而河流的流量保持均匀,不会导致洪水泛滥。
网络的带宽设计也是如此。假设15个IPC与交换机的连接链路工作在百兆全双工状态,交换机的出口端口也是百兆全双工链路,每个IPC发送一路4Mb的视频流。当15个IPC的视频流同时向交换机发送,由于IPC们认为出口链路是百兆,在视频流突发的一瞬间,比如I帧出现的时刻,它们就会按照百兆速率发送报文。如此,虽然15个IPC总的视频码率为60Mbps,远小于交换机的出口带宽100Mbps,但当这些视频流的I帧到达时刻比较接近时,瞬间的总码率将远超100Mbps(理论上最恶劣的情况下瞬间可以达到100Mbps×15)。这一小段时间内未来得及转发出去的包必须依靠交换机的出口缓存进行暂时存放,类似于蓄水坝,称为缓存(嗯,这里是动词的缓存,有点绕口令的感觉哦)。如果缓存不够大,不足以暂存瞬间超标的流量,则会导致视频报文的丢失。解码设备将不能还原出完整的图像,最终引起花屏或者卡顿。
这就是为什么多路视频流的总码率虽然远低于出口带宽,却依旧会出现转发丢包的原因,因为上述原因引起的丢包现象我们称之为拥塞丢包。
图像卡顿的原因清楚了,怎么解决呢?
当然首先是降低交换机入端口的速率了。老U将所有IPC均配置成10Mbps自协商模式,由于交换机的端口也工作在自协商模式,两边最终的协商结果均为10Mbps全双工。老U看了下效果,有不少改善,但当茶馆里面人多运动量大的时候,监控画面依然偶尔会出现轻微的卡顿。
老U是个爱思考的人,既然多个视频流的I帧比较接近时会造成上行口的流量拥塞,那么交换机能否在拥塞的时候通知IPC慢点发码流呢?网管肯定了老U的思路。交换机在全双工链路上有一种流控技术,可以在出端口缓存占比过高时,发送特定的Pause帧给IPC;能够识别这种Pause帧的IPC(老U买的IPC刚巧支持这种功能)能按照Pause帧里面的约定,暂停发送一段时间的报文,避免多个监控终端瞬间流量过大引起交换机端口的缓存溢出,从而使交换机端口速率利用率达到95%以上,提高交换机的监控终端接入数量。也可以理解为把需要缓存的报文从交换机转移到IPC上,用IPC的缓存来换取交换机的缓存,如图1-33所示。
图1-33 视频缓存示意图
当以太网交换控制电路端口工作在半双工模式时,可以实现隐式的流量控制,即采用背压(Back Pressure)技术防止缓冲区的溢出,在发送方数据到来前采取某种动作,阻止发送方发送数据。背压技术是交换控制电路发出一种伪碰撞信号技术:当已用缓冲区容量达到一个预先设定的阈值时,端口将根据这个阈值生成阻塞信号;而当空闲缓冲区容量达到另一个较低的阈值时,端口将取消阻塞信号。
既然可以通过网络技术通知IPC慢点发送码流,可不可以让IPC主动优化码流发送的模式呢?这是必须的。通常摄像机都支持CBR和VBR两种码流模式,在网络传输条件不是很好的情况下,可以采用CBR模式,保证码流的均匀性,避免拥塞丢包。此外,流畅性优先特性的开启,也可以进一步平滑视频流,解码端的缓存机制还可以给予丢失报文的IPC以重传的机会,避免视频卡顿。
老U开启了交换机上的流控功能,把IPC都配置为CBR和流畅性优先模式。通过长期的观察,即使人多运动量大的时候,大屏上所有的画面仍然很流畅。
老U是个有远见的商人,他向网管抛出了一个新的问题:如果以后扩大经营,再接入更多的监控设备,图像岂非仍然卡顿?能否在上行链路上做点文章呢?这当然难不倒经验丰富的网管了,他告诉老U,交换机上有一种网口聚合技术,相当于在交通繁忙的位置多开放几个车道,但是需要在两台交换机间连接多条网线。老U记下了这个技术,打算以后扩大经营时再用。
说明
有些交换机自身有缓存控制选项,例如H3C的部分接入交换机有突发模式选项,对于视频流等突发较大的业务,需要开启突发模式。
网络设备本身的QoS特性微调,也可以带来较为明显的效果,这一块内容我们在后续章节再详细讨论。
家园网友互动
Q:流泪的笑脸 发表于 2015-8-11 20:12
这节中说:通过Pause帧,避免多个监控终端瞬间流量过大引起交换机端口的缓存溢出,从而使交换机端口速率利用率达到95%以上,不明白,怎么理解?
A:网语者 发表于 2015-8-13 11:00
如果不开启Pause帧,通常可能只能接8台8Mbps码率的设备才不会出现图像卡顿,那么利用率就只有8×8÷100,也就是利用率只有64%;开启了Pause帧后,我们可以接入12台左右8Mbps码率的摄像机而不卡顿,这么看来,上行带宽的利用率就可以达到8×12÷100=96%。
秋天到了,果实都成熟了,但老U发现院子的果子总在变少,于是决定在院子的一个角落安装一个摄像机,看看究竟是怎么回事。问题是:最适合的角落距离房子比较远,拉网线一来不好看,二来也容易被老鼠咬断。有什么好办法呢?