一种双网口冗余的视频编码系统的设计与实现
2018-02-28苏威积
苏威积 杜 炜 李 剑
1(北京航天爱威电子技术有限公司 北京 100854)2 (北京邮电大学计算机学院 北京 100876)
1 背景技术
随着互联网的发展,高效、安全地传递信息及实现信息的共享已成为现代社会发展的一个必要条件.视频编码系统作为视频安防监控系统[1]的一部分,对网络有实时性的要求,是不允许网络出现故障的.但网络涉及到的环节非常多,任何一个环节出现问题都会导致整个网络传输运行的停止.所以应该给用户提供冗余的网络、冗余的通道等确保网络的畅通[2].在我们的视频编码系统里,编码板与交换设备实现通信时,通过网线将它们的网口连接起来.其中,交换设备网口中的逻辑端口通过设置的硬件接口与编码板设备实现数据传输.在网口中1个逻辑端口的通信通路出现故障时,可以切换至另一个逻辑端口的通信通路,实现直接、高效的网口故障防护.在视频编码系统中使用双网口冗余方法[3]可以提高链路可靠性,冗余设备的成员能够相互动态备份.当某一个链路中断时其他成员可以迅速接替其工作,切换在1 s内完成,而用户并不会感觉到.
图1 系统架构
现在实现双网口冗余的通常做法是用户设备上只设置1个硬件接口,通过特制的I转2网线连接到交换设备的2个硬件接口上,交换设备上设置内置或外置的开关器件.当交换设备的1个逻辑端口的通信通路发生故障时,通过切换开关,断开故障逻辑端口这一通信通路的物理连接,将连接通路切换至另一个逻辑端口的通信通路,以保证数据的传输[4].这种方式用户设备只要有1个接口即可,切换用的开关器件集成在交换设备上.但是由于开关器件的引入,将会影响信号传输的可靠性,导致收发信号的实际波形无法达标.开关控制状态变换常常引起各种信号震荡,且开关器件本身的可靠性导致其电气防护特性也是有限的,因此这种方式会导致交换设备本身的可靠性降低[5].所以我们需要通过软件控制来使用双网口冗余技术,以保证视频编码系统的稳定性及实时性.
2 系统概况
本文的目的是使用海思Hi353x开发板实现一种双网口冗余的视频编解码系统,使得该系统稳定可靠[6].Hi3531是针对多路D双网口1和多路高清DVR和NVR产品应用开发的一款专业高端SOC芯片.Hi3531内置高性能双核A9处理器、高达5路1080P实时多协议编解码能力的引擎和专用TOE网络加速模块,并且支持2个GMAC接口,可以实现双网口冗余.
本文采用的技术方案如下:
双网口冗余采用的方法是交换设备上的2个逻辑端口分别对应2个硬件接口,2个硬件接口分别通过2根网线与交换设备上的2个硬件接口配合,连接成2个通路,2个通路互相冗余,一旦一个逻辑端口对应的通路坏掉,则可以自动切换至另一个逻辑端口对应的通路上去.这种双网口冗余就是把2个网口当成1个网口使用,起到冗余的作用.
双网口冗余[7]使用的技术是链路聚合技术,也称为捆绑技术.其实是将几条物理链路“组合”成逻辑上的一条数据通道,称为1条聚合链路.将交换机与防火墙之间的2条物理链路link1和link2组成1条逻辑链路,该链路在逻辑上是一个整体,链路内部组成和传输细节对上层是透明的,对外不再使用物理端口号fe1或fe2,而是使用冗余网口号(可命名为rd1).冗余网口对上层来说是一个整体,冗余设备由什么物理设备组成、物理设备之间如何进行协调动态备份,对上层都是透明的.冗余网口内部聚合的物理链路共同完成收发任务并相互备份,只要还存在能正常工作的成员,整个传输链路就不会失效.也就是说如果link1失效,它的任务会迅速转移到link2上,因此编码板与交换设备之间的连接不会中断.这种实现双网口冗余的技术简单易用,很适用于双接口的设备上.
在本系统中,整个双网口冗余的视频编解码系统包括视频编码模块、视频解码模块、冗余网络模块和IO传输模块,如图1所示.
3 系统设计
3.1 视频编码模块
在视频编码模块,我们使用了海思Hi3531开发板进行视频编码,编码模块主要由图2所示的4个部分组成,分别为视频输入、视频处理、视频编码、视频输出[8].
1) 视频输入(VI).将芯片外的视频数据,通过ITU-R BT656/601/1120接口或digital camera接口,存入到指定的内存区域.在此过程中,VI可以对接收到的原始视频图像数据进行裁剪、水平垂直缩小和水平垂直翻转,并输出多个不同分辨率的视频流及对应的直方图信息.
2) 视频处理(VPSS).该部分完成视频的图像增强、去噪、De-Interlace、OSD叠加、锐化等功能.也就是对输入的视频进行前期的处理.
3) 视频编码(VENC).本部分支持多路实时编码,且每路编码彼此独立,编码协议和编码profile可以不同.在支持视频编码的同时,调度VPP模块对视频图像进行视频前处理,调度REGION模块对编码图像内容进行叠加和遮挡.VENC的数据流程如图3所示.
其中编码通道可分为主编码通道和次编码通道,能够同时输出2路码流:一路主码流,另一路为次码流.
4) 视频输出(VO).该部分是本模块的最后一步,输入的视频经过VNEC模块编码后,由输出模块传给交换设备,在这个过程中采用双网口冗余来进行传输,保证了传输的可靠性.
图2 视频编码模块
图3 VENC的数据流程图
这4个部分组成了本系统的视频编码模块,完成了视频从输入到编码、再输出的整个过程.
3.2 视频解码模块
在视频解码模块,我们使用了海思Hi3536开发板进行视频编码,解码模块主要由图4所示的4个部分组成,分别为视频输入、视频处理、视频解码、视频输出[9].
1) 视频输入(VI).将芯片外的视频数据,也就是视频编码模块得到编码后的视频通过IO模块传输过来,存入到指定的内存区域.
图4 视频解码模块
2) 视频处理(VPSS).该部分完成视频的图像增强、去噪、De-Interlace、OSD叠加、锐化等功能.也就是对输入的视频进行前期的处理,同编码模块的视频处理部分.
3) 视频解码(VDEC).本部分支持多路实时解码,且每路解码彼此独立,解码协议和解码profile可以不同.其中解码通道可分为主编码通道和次编码通道,能够同时输出2路码流:一路主码流,一路为次码流.
4) 视频输出(VO).该部分是本模块的最后一步,输入的视频经过VDEC部分解码以后,由输出模块传给屏幕.
这4个部分组成了本系统的视频解码模块,完成了视频从输入到解码、再输出的整个过程,将由编码模块传来的视屏解码后输出到屏幕上,完成了视频安防监控系统的最后部分,保障了视频监控系统的稳定性.
3.3 冗余网络模块
双网口配置设置虚拟为一个网口,实现网口的冗余,其中一个网口坏掉后网络通信仍可正常使用,实现网口层面的负载均衡和高可用性[10].
主要是在Linux开发板上进行配置,具体步骤如下:
1) 进入网口配置目录;
2) 创建双网口绑定配置文件;
3) 修改绑定网口(建议:在网口绑定前,先对先前的网口配置信息进行备份),分别修改网口1和网口2的配置;
4) 配置modprobe参数;
5) 关闭网络管理程序.
3.4 IO传输模块
在本模块里我们采用了select[11]模型,这是一种IO多路复用模型.一般网络程序,使用accept,recv等接口.则服务端,在调用accept时,如果此时没有客户端连接则服务端需要等待.recv也是一样.这种情况下服务端只能阻塞等待.select模块,则是使用select函数去查询你使用到的socket的状态.比如,是否有客户端连接,是否有客户端发送数据.这样可以针对有数据的socket进行操作.避免盲目等待.
最主要的一个函数就是select函数.该函数有5个参数.
maxfdp:是一个整数值,是指集合中所有文件描述符(socket)的范围,即所有文件描述符的最大值加1.
readfds,writefds,errorfds都是fd_set类型的指针,是1个socket的数组指针.
readfds:进行可读操作查询的文件描述符的集合,不需要读操作,则可传入NULL.
writefds:进行可写操作查询的文件描述符的集合,不需要写操作,则可传入NULL.
errorfds:进行文件异常错误查询的文件描述符,也可以传入NULL.
timeout:第一,若将NULL以形参传入,即不传入时间结构,就是将select置于阻塞状态,一定等到监视文件描述符集合中某个文件描述符发生变化为止;第二,若将时间值设为0秒0毫秒,就变成一个纯粹的非阻塞函数,不管文件描述符是否有变化,都立刻返回继续执行;第三,timeout的值大于0,这就是等待的超时时间,即select在timeout时间内阻塞,超时时间之内有事件到来就返回,否则在超时后不管怎样一定返回.
返回值:如果有错误,则返回值为-1,如果超时返回则返回值为0,如果文件描述符里面有变化,则返回值大于0.
4 总 结
本文描述了一种双网口冗余的视频编码方法及系统,是安防视频系统的一部分,所以要求高实时性和高稳定性.我们将视频通过Hi3531进行视频编码后传给IO模块输出,在输出过程中我们采用了select多路复用实现多路传输,并利用冗余模块保证了一个网口断掉,视频可以在另一个网口上继续传输,视频传输到Hi3536进行解码,最终输出到屏幕上.
[1]雷玉堂. 安防视频监控实用技术[M]. 北京: 电子工业出版社, 2012
[2]丁鑫. 基于网络冗余技术的应用[J]. 工业控制计算机, 2014, 27(5): 162-162
[3]王华, 刘冰, 刘焕敏, 等. 一种双网实时串口通信的设计与实现[J]. 计算机系统应用, 2017, 26(3): 234-238
[4]刘锡祥, 徐晓苏, 刘建娟, 等. VxWorks环境下基于TCP/IP协议的多网卡数据传输与双网卡冗余设计[J]. 工业仪表与自动化装置, 2006, 36(3): 30-32
[5]张士民. 基于TCP/IP网络环境下网卡冗余热备的实现[J]. 信息技术与信息化, 2016, 41(11): 26-28
[6]皮玉华. 基于海思Hi3531的高清视频解码器硬件系统设计[J]. 中国公共安全: 学术版, 2016, 15(2): 124-126
[7]刘玉宾. 基于VxWorks的双冗余热切换以太网的设计与实现[D]. 天津: 天津大学, 2008
[8]于凤. 基于Hi3511的H.264编解码器的设计与实现[D]. 西安: 西安电子科技大学, 2013
[9]马林. 基于 H.264的远程视频传输软件系统的开发[D]. 长春: 吉林大学计算机科学与技术学院, 2014
[10]王哲梁. 基于嵌入式Linux的远程视频监控系统[D]. 杭州: 杭州电子科技大学, 2014
[11]刘运强, 王汇源. Socket和多线程在视频传输中的应用[J]. 山东大学学报: 工学版, 2004, 34(2): 46-50