智能视频监控系统中的网络拥塞解决策略

摘 要:借鉴TFRC拥塞控制模型原理,提出一种网络拥塞自适应解决策略,按照该网络拥塞解决策略的要求,结合网络视频流传输相关技术为系统后台服务端设计了一个网络拥塞处理模块。该模块通过接收端反馈回来的网络状况报告,制定出平滑的数据传输带宽,系统根据该传输带宽对数据发送模块和视频编码模块运作进行指导。

关键词:智能视频监控;网络拥塞;网络自适应;TFRC

DOIDOI:10.11907/rjdk.151262

中图分类号:TP393

文献标识码:A 文章编号:1672-7800(2023)007-0166-03

0 引言

近年来,伴随技术的不断进步,视频监控系统在人们日常生活中的应用越来越广泛。当前,视频监控系统正朝着数字化、智能化方向发展,为用户提供一个全面智能的安全防护解决方案尤为必要。各种报警传感器和智能网络摄像机地诞生为视频监控系统的发展提供了基本保障。然而,这些设备大多是通过网络进行数据传输,现有的网络体系结构只能提供尽力而为的传输服务,缺乏服务质量保障,这对网络带宽需求量最大的视频流传输产生了严重影响。如何在网络环境下为大量的视频流传输提供可靠保证,已成为网络视频研究的热点问题。

1 视频监控系统网络拥塞控制解决方案

本文提出的针对视频监控系统的网络拥塞解决方案设计如图1所示。视频监控系统主要由服务端和客户端两部分组成。

服务端通过视频信息采集模块,读取来自视频源的信息。读入视频信息后,由视频解码模块负责对视频信息作分析处理,将原始视频数据转换成可以重新编码的视频信息。随后根据网络拥塞控制模块制定的相关编码参数,进行视频编码工作,生成适合于网络传输的视频数据,根据RTP协议格式要求把这些视频数据连续发送给客户端。传输过程中的差错控制、传输速率控制由网络拥塞处理模块来实现。

客户端在接收到数据包信息后,将它们加入到一个缓冲区中,再调用解码库进行解码。解码后获得的视频信息通过视频分析处理模块进行移动侦测、人脸识别等图像分析工作后,再显示给用户观看或者保存起来。

客户端QoS监视模块采集到的网络信息,如包的丢失率、包延时时间及环路时间等,经处理计算后,根据RTCP协议格式要求传送给服务端,由服务端的网络拥塞处理模块对这些信息进行处理、分析,进而保障服务端视频编码及数据传输的正常进行。实现视频流自适应控制传输,为用户提供一个可靠、稳定、良好的视频观看环境。

图1 视频监控系统网络拥塞控制解决方案

2 网络拥塞控制模块

发送端的网络拥塞控制模块主要依照TFEC模型来设计,其工作原理如图2所示。TFRC的稳态速率计算公式为:

B(p)=stRTT2bp3+t0min(1,33bp8)p(1+32p2)(1)

其中,s代表TCP报文大小,单位是字节;p代表丢失事件率,t0代表数据报文的超时时间,tRTT为数据报文的环路时间,b为一个应答所接收到的报文数数目(b规定为1)。通过式(1)就可以计算出一个传输数据流的稳态发送速率B(p)。

图2 网络拥塞控制模块工作原理

发送端在准备需要发送的视频信息后,将这些视频信息按RTP协议要求打包,添加时间戳、状态值,发送序号等一些网络信息,接收端在收到这些视频信息数据包后,除了解码恢复出图像信息外,还要提取出时间戳等信息,采用反馈控制法计算出包丢失率、环路时间、瓶颈带宽等信息。这些网络状况信息交给接收端的网络状况反馈模块,按照RTCP协议的要求打包传输给发送端。发送端根据这些反馈信息,依照网络拥塞自适应控制模型,计算出当前的网络带宽,制定平滑的网络数据传输速率调整方案,进行视频编码的相关参数调整,力求保证视频服务质量。

2.1 视频编码调整

视频编码调整的目的在于降低编码码率或是调整帧速,以适应当前网络带宽。本视频监控系统采用H.263+和MJPEG4两种编码标准。它们比较适合于局域网内的视频传输。

2.2 发送速率调整

发送端自适应控制模块根据网络拥塞控制模块提供的网络状况信息,将发送速率逐步地调整到期望速率,力求和实际网络带宽相匹配,保障视频流网络传输的正常进行。该过程是一个渐进过程,数据发送率不能发生大的跳变,否则对接收端的观看效果影响很大。

(1)客户端瓶颈带宽计算。

如图3所示,发送端在时间点为tTimestamp时向接收端发送了一个数据包,随后在收到N个含有时间戳tTimestamp的数据包后,使用式(3)来计算瓶颈带宽。

BnBw=∑Ni=1packet[i]tRecv_ClientN-tRecv_Client1(2)

其中,BnBw为网络瓶颈带宽值,Packet[i]为第i个数据包的大小,单位为Byte,tTimestamp为数据包发送时间戳,tRecv_ClientN为接收到第N个数据包的时间,tRecv_Client1为接收到第一个数据包的时间。

图3 数据包收发

使用式(2)计算出网络的瓶颈带宽BnBw可用作数据发送速率的上限值。以BnBw作为一个上限值,和TFRC算法计算出的带宽值一起帮助制定发送速率,可以有效避免发送速率调整波动过大。

(2)数据发送速率制定。由TFRC稳态速率公式(式1)可知,稳态发送速率B(p)是伴随丢失事件率等参数的变化而改变的。但是拥塞控制模型并不是直接将B(p)值用以调整数据的发送速率。事实上,发送速率的调整应当是一个缓慢变化的过程,这样可以避免引起大波动,影响到接收端视频观看的效果。数据发送速率可参照式(3)-(6)制定:

Sendrate=B(p)(3)Sendrate=0.75×Sendrate+0.25×PreSendrate(4)Sendrate=min(Sendrate,BnBw)(5)PreSendrate=Sendrate(6) 其中,B(p) 为TFRC稳态速率计算公式中计算得出的网络带宽,Sendrate为数据的发送速率,PreSendrate为前一次的数据发送速率,BnBw为根据客户端反馈计算得出的网络瓶颈带宽。参照TFRC模型,网络视频流的传输既能保证与TCP流的友好,又可以使数据传输速率较为平滑,为网络视频数据流的传输提供了良好保证。

3 客户端缓冲

数据从发送端到达接收端的过程中会遇到很多突发情况,虽然RTP协议为RTCP协议提供了一定的服务质量保证,但是包丢失和包失序的情况不可能消除,所以接收端必须有相应的一些策略来对丢失和包失序进行处理。本文设计的视频监控系统解决该问题的做法是在数据被提交给上层处理之前,利用RTP数据包头信息中的序列号对数据包进行重排,为此,在期望的数据包到达接收端之前,接收端将非期望数据包暂时保存于一个缓冲区中,然后不断进行检测,一旦需要的包全部到齐,则按顺序提交给上层处理。对于缓冲区的使用,系统要面对的主要有两个问题:缓冲区容量和缓冲区管理策略。

3.1 缓冲区容量

将当前送往上层处理的数据包的序列号记为Sp,当前接收到的数据包的序列号记为Se。在出现失序时,Se>Sp+1;只有在Se=Sp+1时,序列号等于Se的数据包才是上层期望得到的。如果在该序列号等于Se的数据包到达之前,就已经有N个包到达了接收端,那么缓冲区必须能够容纳下这N个包。假定每个数据包的平均长度是L,则要保存下这N个包所需的缓冲区的大小应该是N*L。缓冲区的实际大小记为Bs,很明显,Bs不能够仅仅是等于N*L,因为如果N很大,则N*L将趋近于无穷大(在包丢失的情况下,N实际上等于无穷大)。如何确定下一个适当的Bs值,对于接收端的观看效果影响是很大的。Bs值如果取得太小,则由于不同网路之间的延迟等情况而造成的迟到包不能被保存下来,这会导致大量的数据包在接收端被丢弃掉。若Bs值太大,则计算机需要分配很大的缓冲区,造成资源浪费。况且Bs越大,声音和图像的延迟也会越大,并造成后面的数据包由于得不到及时处理而被丢弃。

3.2 缓冲区容量调整算法

本文设计的视频监控系统采用一种反馈方式来动态调整缓冲区容量。该算法经实践检验,能有效地解决视频流在网络传输过程中的包失序现象。算法具体流程描述如下:

(1)首先设定两个参数值,缓冲区最大值Nmax,缓冲区最小值Nmin。

(2)缓冲区大小的初始值设定为n,且要求n=Nmin。

(3)如果连续3次因为缓冲区太小,后继到达的期望数据包被丢失,那么要求缓冲区增加一个单元(这里的单元含义是:根据所有数据分组而计算出来的平均长度),即n=n+l;如果n已经增加达到设定的最大值Nmax,则保持n=Nmax,不再增加。

(4)如果连续3次,期望数据包Se和当前正在处理的数据包之间的间隔(也称为Se的失序程度)都小于当前的缓冲区容量n,那么要求缓冲区容量减少掉一个单元,即n=n-1,;如果n 减小到最小值Nmin,保持n=Nmin不再减少。

根据实际测试中的经验,通常Nmin值设定为2或3。Nmax的值一般不能太大,设置为10左右比较合理,根据服务器的硬件配置可作适当调整。

接收端缓冲区可以被理解成一个拥有上限值和下限值的滑动窗口,按照当前网络状态的变化,该滑动窗口做自适应的放大、缩小。

4 接收端图像分析处理

借助于数字视频处理等技术,视频监控系统的发展正朝着智能化方向发展,本文设计的视频监控系统借助于OpenCV库,实现了对视频流的目标跟踪和人脸检测。

接收端启动后,若成功与发送端建立连接,将开启3个主要线程用于视频的接收、显示、图像分析、视频保存。

第一个线程,即数据接收线程。主要负责网络通信,在接收到发送端传来的数据后,这些数据将全部加入到缓冲区,随后按数据包序号有序地传送给图像解码/显示线程,同时还承担网络状况计算和反馈的功能。

第二个线程,即图像解码/显示线程。主要功能是对视频数据进行解码,得到可以用于编辑、显示的视频数据。若用户只要求观看发送端传来的原始视频数据,图像解码/显示线程就可以直接满足其需要,另外一个图像处理线程将处于挂起状态,以节约计算机资源。

第三个线程,即图像处理线程。针对视频流进行图像分析,提供诸如人脸识别、目标跟踪等职能辅助功能,其核心是利用数字图像分析技术来对图像进行分析、处理,OpenCV是一个很好的开源视觉库,支持VC++,经常重新分装的OpenCV库页能支持C#等其它编程语言。OpenCV自身就提供了丰富的图像处理函数,开发人员也可以根据自己的要求,自行开发新的功能。OpenCV具有通用的视频/图像载入、保存、获取模块,经OpenCV处理后的视频、图像可以按照多种编码格式保存。

5 结语

本文关于视频监控系统的研究从搭建一个最简单的视频监控平台开始,最初的开发目标只要求能满足同时接收多路摄像机视频流,并显示给用户观看即可。随着开发的逐步深入,整个系统功能得到了极大扩展,成为一个稳定、可靠、功能较为齐全的视频监控平台。在开发过程也遇到了各种困难,经过大量的尝试和失败后,最终找到了问题的解决办法,如程序中拥有10个线程导致CPU占用率高达90%,而且线程间经常出现不同步现象等。伴随着线程池等技术的应用,程序CPU占用率过高的问题得到了解决,线程池技术对多线程的管理也起到了积极作用。

参考文献:

[1] 黎洪松.数字视频技术及其应用[M].北京:清华大学出版社,1997.

[2] 袁野.基于嵌入式技术的网络视频监控系统[J].通讯世界,2002(4):62-63.

[3] SIMON ROBINSON,CHRISTIAN NAGEL.C#高级编程[M].第3版.北京:清华大学出版社,2005.

[4] 刘富强.数字视频监控系统开发及应用[M].北京:机械工业出版社,2003.

[5] 马喜廷,孟荣芳.IP网络摄像机[J].电视技术,2003(5):84-85.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 yyfangchan@163.com (举报时请带上具体的网址) 举报,一经查实,本站将立刻删除