田时舜,章明朝,周 跃,闫 丰,隋永新
(1.中国科学院 长春光学精密机械与物理研究所 应用光学国家重点实验室,吉林 长春130033;2.中国科学院大学 大珩学院,北京100049)
视频监控系统目前已发展到基于IP网络的数字视频监控系统。文献-[1]中基于DM6446的网络服务器能满足上述行业的视频监控,但它使用DSP 处理器来实现视频压缩算法,使得DSP的负载较高,系统可扩展性不高,且编码能力有限,最高只能支持到D1分辨率,应用有一定的局限性。在森林火灾监控、机器故障检测、气象、医学等需要对视频进行相关处理的应用领域中,DM6446 略显不足,相比而言,DM8148性能更好、可扩展性更高。DM8148含有两个可配置的视频采集端口,可以完成至多四路视频的采集;配置的HDVICP2 高清视频协处理器中集成有H.264等主流视频压缩算法,最高可支持1080P60Hz的实时H.264视频编码;高性能DSP C674x能很好地运行相应的图像处理算法[3],可以用于对视频信息的提取和图像的融合。本文设计了一种基于DM8148的高性能、可扩展的嵌入式网络视频服务器,最高能支持1080P60Hz的实时视频监控,并测试完成了720P 高清视频信号的采集、压缩,以及RTP实时网络传输。系统集成度高,可扩展性强,具有广泛的应用前景。
本文采用TI公司的TMS320DM8148芯片设计了一款网络视频服务器,系统由视频采集模块,视频处理模块,视频压缩模块和网络传输模块构成。使用的压缩标准为H.264,网络传输协议为RTP协议。
ARM 子系统运行Linux操作系统,负责系统的总体控制及网络传输,VPSS负责视频的采集,HDVICP2用于实现视频的编码工作,DSP 负责相应的图像处理算法,Syslink/IPC用于完成处理器之间的数据通信,解码芯片采用TVP7002.VPSS采集到一帧数据后传递给DSP视频处理模块进行必要的视频处理,处理后的数据被传递至编码模块,编码模块通过调用HDVICP2实现H.264编码,采用RTP实时传输协议将压缩后的视频数据发送至客户端。系统总体框架如图1所示。
图1 系统框架
软件平台设计包括本系统各功能模块的具体实现,是本设计的核心内容。
本设计中,有视频采集,视频压缩及网络传输多个任务同时运行,这就需要系统同时处理多个任务。在Linux操作系统下可以选择多进程或者多线程设计,但线程之间的切换需要操作系统做的工作比进程之间的切换少的多,且同一个进程内的线程之间共享全局变量,文件描述符,信号处理函数等,这样对系统资源的占用也相对较小[4],故本文采用多线程设计,线程之间使用管道PIPE进行数据传递。主线程用于系统的控制,为各功能模块分别创建一个线程。
V4L2是Linux内核中关于视频设备的内核驱动,它为Linux中视频设备访问提供了通用接口[5]。DM8148处理器的视频采集通过VPSS模块来完成。具体架构如图2所示。
图2 VPSS结构
最底层是VPSS硬件采集接口,M3VPSS Firmware是运行在Cortex-M3 控制器上的基础控件,BIOS Notify Library与Kernel Notify Library是Syslink Library的一部分,用于完成A8 与M3 之间的通信,VPSS FVID2Library是TI提供的一个硬件抽象层,用于控制M3控制器上运行的固件[6]。同时也为上层驱动 (V4L2)提供一套API,FBDEV 则是用于管理图片显示的帧缓冲区的模块,V4L2 通过调用VPSS FVID2Library完成对硬件的访问,应用程序通过调用V4L2接口即可完成视频的采集工作。视频采集过程如图3所示。
DM8148有两个24bit的视频输入端口,每个端口至多可采集双通道的8bit视频,即系统最多可以完成4路视频的采集,能很好的满足系统的要求。
本文中配置VIN0 为单通道的16bit YCbCr视频采集模式,解码芯片使用TVP7002,将解码芯片信息加入内核,以下是关键内核配置信息:
图3 V4L2视频采集流程
Linux内核通过相应的I2C 地址去配置对应的解码芯片。再将V4L2标准的解码芯片驱动编译成内核模块加载到系统中,就可在应用程序中通过V4L2 接口完成视频的采集。
在一些特定的视频监控领域还需要对所采集的视频进行一些必要的处理,在引言提到,此处不再赘述。
编解码引擎 (codec engine)是TI达芬奇处理器的软件框架[7]。在此框架下,DSP 可集成多个算法,成为算法服务器,ARM 应用软件作为客户端动态地请求DSP 创建算法任务。系统框架如图4所示。
图4 Codec Engine框架
算法必须符合xDM 标准,VISA API为这些算法提供了接口,将这些算法集成入一个算法服务器,ARM 应用程序就可以通过相同的VISA API来调用相应的DSP 算法。当ARM 应用程序调用某个算法时,算法服务器将创建此算法实体。
本文中将视频处理算法封装到DSP 算法服务器中,在ARM 端应用程序中创建视频处理线程,从视频采集线程中获取原始数据,通过Codec Engine调用DSP视频处理算法对视频进行处理,并将数据传递至视频压缩线程。
H.264算法是由国际电信联盟标准化组织的视频图像专家组和国际标准化组织的运动图像专家组共同组成的联合视频组所开发的最新的视频编码标准,相对于更早的MPEG-x和H.263视频压缩算法,H.264算法提供了更高的编码压缩效率和良好的网络适应性,具有低码率,容错能力强,应用目标范围较宽等特点[8]。
HDVICP2支持目前大部分编解码和变换编码标准,能够完成分辨率高达1080P60Hz的H.264实时视频压缩。
HDVICP2中的视频压缩算法通过OpenMax API来调用,OpenMax程序有多个组件组成,每个组件负责特定的功能,每个组件由一到多个不等的端口,组件之间通过端口进行数据传输。在本系统中只用到编码组件,视频压缩组件通过其输入端口从图像处理线程获取YUV 视频数据,将压缩后的H.264 码流通过输出端口输出存储至SD 卡,并传递给网络传输线程。编码流程如图5所示。
H.264数据流的NAL支持多种基于包的有线或者无限网络传输,为了满足基于IP网络的视频传输,互联网工程组提出了一些音视频数据传输的协议,如RTP/RTCP、RTSP、RSVP、SIP等。本文中考虑使用RTP/RTCP协议。
基于UDP协议的实时传输协议RTP更加侧重于数据传输的实时性[9]。RTP协议提供的服务包括时间载量标识、数据序列、时间戳、传输控制等等。实时传输控制协议RTCP主要是用来进行流量控制和拥塞控制,RTP通过RTCP获取数据传输相关的控制信息,RTP传输过程如图6所示。
图5 编码流程
图6 RTP传输过程
通常IP网络的最大传输单元MTU 为1500字节,当传输包的大小大于MTU 时,网络层会将其进行分割,由于UDP协议并不保证传输可靠,一个数据包的丢失会影响同一个原始包的其它分割包,这样会降低传输效率。
对此,RFC3984标准规定了对H.264数据流进行RTP打包的策略,分为单一NAL打包模式、组合打包模式和分片打包模式。MTU 为1500字节,IP/UDP/RTP/协议头的总长度至少占40字节,所以RTP 的最大载荷为1460,本设计中设定的阈值为1360字节。由于本系统中视频源的分辨率较高,长度小于1360字节的帧极少,为了降低程序的复杂度,故未使用组合打包模式[10]。
H.264的RTP打包框架如图7所示。
图7 RTP打包框架
采用720P高清视频源对系统进行测试,视频经过压缩编码后通过网络传输至PC 客户端,使用VLC 播放器进行播放。效果如图8所示。
图8 VLC播放效果
使用Wireshark工具进行网络抓包效果如图9所示。
本文在DM8148的基础上设计了一款高性能的嵌入式网络视频服务器,将监控视频的分辨率提高到了720P,最高可支持1080P;此外系统的可扩展性强,针对有视频处理需求的应用可以将相关的图像处理算法移植到DSP处理器中;本设计至多可扩展四通道采集,能很好的满足有多通道视频监控需求应用的要求;此外,可进一步开发自主的显示界面,并通过网络协议实现对远程系统的控制,如调节相机曝光量、聚焦等等,增加系统的集成度。
图9 网络抓包
[1]CHEN Xiao,ZHANG Xuejie.Research of network video server design technology based on DAVINCI dual-core chips[J].Journal of Yunnan University (Natural Sciences Edition),2009,31 (S1):122-127 (in Chinese). [陈晓,张学杰.基于DAVINCI双核芯片的网络视频服务器的设计技术研究 [J].云南大学学报 (自然科学版),2009,31 (S1):122-127.]
[2]LAI Haijun.Design of dual-channel video capture and pre-processing system based on FPGA [D].Nanjing:Nanjing University of Science and Technology,2013 (in Chinese). [来海军.基于FPGA 的双通道视频采集与预处理系统设计 [D].南京:南京理工大学,2013.]
[3]WANG Jingxiong.Software development of video processing system based on DM8148processor[D].Hangzhou:Zhejiang University,2013 (in Chinese).[王靖熊.基于DM8148处理器的视频处理系统软件研发 [D].杭州:浙江大学,2013.]
[4]Neil Matthew,Rick Stones.Beginning Linux programming [M].4th ed.New York:Wiley Publishing,2007:495-497.
[5]LIU Sheng,ZHAO Jingjing,FAN Xiuli.The embedded video surveillance system based on V4L2 [J].Microcomputer Application,2011,32 (1):37-42 (in Chinese). [刘升,赵晶晶,范秀丽.基于V4L2的嵌入式视频监控系统 [J].微计算机应用,2011,32 (1):37-42.]
[6]YANG Zhenyong,WANG Yanjie,SUN Haijiang,et al.Design and implementation of SOC high definition video processing system based on TMS320DM8168 [J].Chinese Journal of Liquid Crystals and Display,2013,28 (5):764-769 (in Chinese). [杨振永,王延杰,孙海江,等.基于TMS320DM 8168的SOC高清视频处理系统的设计与实现 [J].液晶与显示,2013,28 (5):764-769.]
[7]SONG Jintao.Research and implementation of video processing platform based on Codec Engine software framework [D].Chengdu:University of Electronic Science and Technology of China,2013 (in Chinese).[宋金涛.基于Codec Engine软件框架的视频处理平台研究与实现 [D].成都:电子科技大学,2013.]
[8]ZHOU Qiang,FEI Zhangjun,WANG Qiang,et al.Design and development of H.264-based embedded network video server[J].Journal of Computer Applications,2010,30 (2):555-559 (in Chinese). [周强,费章君,王强,等.基于H.264的嵌入式网络视频服务器的设计与开发 [J].计算机应用,2010,30 (2):555-559.]
[9]WANG Hongzhi,YU Haolin.Design of enbedded remote monitoring system based on ARM-Linux [J].Journal of Jilin University (Science Edition),2014,52 (1):103-107 (in Chinese).[王宏志,宇皓林.基于ARM-Linux远程视频监控系统的设 计 [J].吉 林 大 学 学 报 (理 学 版),2014,52 (1):103-107.]
[10]JIANG Junjie,WANG Zhiming.Design of embedded video surveillance system based on X264 [J].Computer Engineering and Design,2013,34 (12):4199-4203 (in Chinese).[江俊杰,王志明.基于X264 的嵌入式视频监控系统设计[J].计算机工程与设计,2013,34 (12):4199-4203.]