欢迎来到学术参考网

基于DM365网络视频监控系统的设计的策略研究

发布时间:2015-07-29 09:58

 0 引言
  随着电子、计算机、通信和自动化技术的发展,嵌入式视频监控系统已成为现代安防系统发展趋势,并且已经引起了人们的重视。嵌入式视频监控系统主要由嵌入式处理器、嵌入式操作系统及相关软硬件等组成。TI公司的达芬奇技术是一种专门针对数字视频应用、基于信号处理的解决方案,能为视频设备制造商提供集成处理器、软件、工具和支持,以简化设计进程,加速产品创新[1]。本系统采用TM320DM365(简称DM365)视频处理芯片开发嵌入式网络视频监控系统,它具有功耗低、性能高、开发周期短、可扩展等优点。
  1 网络视频监视系统结构
  DM365处理器集成了一个ARM926EJ-S内核,一个H.264高清编解码协处理器HDVICP和一个MPEG-4/JPEG高清编解码协处理器MJCP,可以支持H.264/MPEG-4高清视频编解码。本系统利用DM365的强大运算能力,在ARM926EJ-S内核上运行基于Linux操作系统的应用程序实现视频采集、视频显示、网络通信、流媒体传输、外围器件控制等;在HDVICP协处理器上运行H.264算法来实现视频编码。
  本系统所设计的网络视频监控系统总体结构如图1所示,它由摄像头、视频服务器、网络和客户监控端等模块组成。摄像头实现对现场实时视频的采集,由视频服务器读取采集到的视频信号经H.264编码器编码后进行存储和网络实时传输;客户监控端主要完成视频信号的接收、存储、播放和下载等功能。另外,客户监控端可以把用户的操作转换成相应的控制信号发送到视频服务器,由视频服务器对外围器件进行控制。
  2 视频监控服务器模块的设计
  视频监控服务器的主要任务是监听网络连接,采集视频数据,视频数据压缩编码,存储视频数据并分发给客户监视端[2]。在视频数据采集方面,使用V4L2常用模型;在编码方面,结合DM365芯片的特点采用H.264压缩编码标准;另外,使用RTP/RTCP协议在视频监控服务器与客户监控端之间进行视频数据传输[3]。
  2.1 视频监视服务器模块工作流程
  视频监控服务器包括三个子模块,一是视频数据处理子模块,负责视频数据采集与编码;二是视频监控控制子模块,负责开启、关闭视频监控等控制操作;三是数据传输子模块,负责视频数据的实时传输以及备份视频数据等工作。视频监控服务器模块的工作流程如下。
  ① 主控程序对系统初始化,主要包括ARM处理器与HDVICP协处理器的共享内存的配置,视频采集设备的初始化等。
  ② 主控程序建立视频采集线程Capture、视频压缩线程Video、视频数据存储与实时传输线程Trans、视频文件备份线程BackData和监听线程Listen。当主控程序完成初始化工作和线程创建工作后转化为系统控制线程Ctrl。
  ③ Capture线程负责采集视频信号;Video线程负责将视频采集线程采集到的视频信号用H.264编码器压缩编码;Trans线程负责将压缩后的视频数据存储在视频服务器端的硬盘上,并实时地将视频流传输给视频监控端;Listen线程主要负责监听客户监控端的控制命令,并对命令进行词法解析,执行相应的命令;BackData线程负责视频文件的传输,以备客户端备份视频文件。
  ④ 如果退出系统,则所有线程结束;否则循环执行③。
  2.2 视频数据处理子模块流程
  在视频监控服务器中涉及到的数据分为两类:一类是摄像头采集到的原始视频数据,一类是压缩后的视频数据。这两类数据均存放在缓冲区中,这些缓冲区被多个线程共享。共享的方法是采用管道通信,一方将缓冲区的地址送入管道,另一方从管道读取缓冲区地址对该缓冲区共享。
  2.2.1 缓冲区共享
  由于运行在Linux上的应用程序调用malloc获得的缓冲区所用地址均为虚拟地址,因此,缓冲区的物理空间不一定连续,当把缓冲区的地址传递给协处理器进行编码的时候,数据完整性问题就出现了,因为编码算法是运行在HDVICP协处理器上的,这是一个只有实地址的世界。所以,TI公司开发的编码引擎(Codec Engine,简称CE)的软件架构时提供了CMEM模块,该模块为ARM926EJ-S内核和协处理器之间通信提供了连续的内存。程序员可调用CMEM API申请物理上连续的共享缓冲区。
  本系统设置了四个管道,其中CVInFifo和CVOutFifo这两个管道由Capture线程和Video线程共享;VTInFifo和VTOutFifo这两个管道由Video线程和Trans线程共享。三个线程共享四个管道的示意图如图2所示。在系统初始化时,Video线程和Trans线程通过调用CMEM API分别申请若干个物理地址连续的缓冲区,Video线程将其申请的缓冲区地址送入CVInFifo管道,Trans线程将其申请的缓冲区送到VTOutFifo管道。Capture、Video、Trans和Ctrl四个线程汇集在一起后,循环执行以下步骤以实现视频数据的采集、编码和传输。
  [Video线程初始化时,申请若干个连续的缓冲区,并将各缓冲区地址送入管道。][⑤Video线程将废弃的缓冲区hCapBuf送入管道,供Capture线程使用。][②Capture线程将缓冲区hCapBuf的地址送入管道。][⑥Video线程将已编码视频数据缓冲区hDstBuf的地址送入管道。][⑧Trans线程将废弃的缓冲区hDstBuf送入管道供Video线程使用。][Trans线程初始化时,申请若干个连续的缓冲区,并将各缓冲区地址送入管道。][①Capture线程从管道获取一个空缓冲区hCapBuf,并采集一帧原始视频保存在该缓冲区中。][③Video线程获得装有原始视频帧的缓冲区hCapBuf。][⑦Trans线程从管道获取一个已编码的缓冲区hDstBuf,将其内容写入文件,并按RTP/RTCP协议传输给客户端。][④Video线程从管道获取一个空缓冲区hDstBuf,并对hCapBuf缓冲区中的视频数据进行编码,其结果存放在缓冲区hDstBuf中。] [CVInfifo] [CVOufifo] [VTInFifo] [VTOutfifo]
 ① Capture线程从CVInFifo管道获取一个空缓冲区hCapBuf,采集一帧视频并保存在该缓冲区中;
  ② Capture线程将缓冲区hCapBuf地址送入CVOutFifo管道;
  ③ Video线程从CVOutFifo管道中获得装有原始视频帧的缓冲区hCapBuf;
  ④ Video线程从VTOutFifo管道中获取一个空缓冲区hDstBuf,并对hCapBuf缓冲区中的视频数据用H.264编码器进行编码,其结果存放在缓冲区hDstBuf中;
  ⑤ Video线程将废弃的缓冲区hCapBuf送CVInFifo管道,供Capture线程循环利用;
  ⑥ Video线程将已编码的视频数据缓冲区hDstBuf的地址送入VTInFifo管道;
  ⑦ Trans线程从管道获取一个已编码的缓冲区hDstBuf,将其内容写入文件,并按RTP/RTCP协议传输给客户端;
  ⑧ Trans线程将废弃的缓冲区hDstBuf送入管道供Video线程使用。
  2.2.2 H.264编码器
  系统选择先进的H.264编码方案。H.264编码器继承了H.263和MPEGl/2/4视频编码器的优点,在吸收变换编码和运动补偿的基础上,采用全新的帧内预测、多帧参考预测、高精度运动估计、类DCT整数变换、基于上下文的自适应熵编码、去块效应滤波等编码技术,有效提高了数据压缩效率[4]。H.264引入了面向包的编码机制,有利于网络中的分组传输,支持网络中视频的流媒体传输,能适应于不同网络中的视频传输,网络亲和性好。
  在H.264标准中定义了两个层次:视频编码层(VCL)和网络抽象层(NAL)。VCL主要负责高效的数字视频数据压缩。VCL处理的是块、宏块和片的数据,并尽可能地设计成不依赖于任何网络的特性。NAL处理的主要是片以上的数据,提供适当的接口对数据进行打包和传送。在VCL和NAL之间定义了一个基于分组方式的接口。这样,高编码效率和网络友好性的任务分别由VCL和NAL来完成。H.264的这种双结构扩大了应用范围,几乎涵盖了视频监控、视频点播、流媒体业务等大部分的视频业务。
  本系统采用TI达芬奇技术来实现H.264编码器,此视频压缩算法运行在HDVICP协处理器端,ARM端通过引擎Codec Engine和服务器Code Server与HDVICP协处理器进行交互[5]。编码后的H.264视频序列是由一系列NAL单元构成。一个NAL单元就是一个变长的包括某一类型的语义元素的字节流。比如,NAL单元可以装载一个图像码片、一个A/B/C的数据分割、一个序列或者图像的参数设置等。
  2.3 网络传输模块的设计
  网络传输模块的主要功能是负责为客户端的请求建立链接,并将经H.264编码器编码的视频流传输给客户端。这项工作由Listen和Trans两个线程完成。
  网络服务器与客户监控端采用UDP数据包进行通信。Listen线程循环监听用户请求,当有用户请求实时监控视频时,Listen线程将该用户的IP地址及UDP端口号保存在与Trans线程共享的变量ClientUdp[]中,Trans线程根据变量ClientUdp[]创建UDP套接字,并按RTP/RTCP协议传输实时视频编码。当用户关闭视频监时,Listen同样将用户的关闭视频请求传递给Trans,Trans将关闭相应的UDP套接字,停止视频的实时传输。另外,Listen线程还具有接收来自客户端的控制命令,比如实现视频文件的下载,以及关闭和开启实时视频监控等功能。
  2.3.1 NAL单元的提取与RTP数据包的传输
  由于在达芬奇DM365开发平台上的H.264编码器的输出码流中,每个NAL单元前面有4个字节的前缀来标识NAL单元边,即起始码前缀(0x00000001)。因此,Trans线程可以根据起始码从已编码缓冲区中提取出各个NAL单元以备发送,即从Video线程和Trans线程共享的缓冲区中获得H.264编码的图像帧的数据,并在每帧的数据里搜寻出每个NAL单元。在默认情况下,达芬奇DM365开发平台采用的H.264编码器每次提供一个完整的H.264视频帧,除第一帧由三个NAL单元组成外,其他帧仅包含一个NAL单元。第一帧的三个NAL单元的类型分别为序列参数集(SPS)、图像参数集(PPS)和IDR图像片段。其他帧的NAL单元类型均为I图像片段。
  实时传输协议RTP负责提供实时数据(如交互式的音频和视频)的端到端传输服务,它可以建立在底层的面向连接或非面向连接的传输协议之上。通常情况下RTP数据包使用UDP来传送,但它不能为按顺序传送数据包提供可靠的传送机制,也不提供流量控制或拥塞控制,而是依靠实时传输控制协议RTCP提供这些服务。本系统按RTP数据包格式将每一帧视频打包后,使用UDP套接字将该数据包发送给客户监控端。
  2.3.2 实时监控的实现
  4 结束语
  本系统基于DM365嵌入式平台,设计了嵌入式网络视频监控系统。视频服务器端主要实现视频的采集、编码与网络传输,通过四个共享管道实现视频数据流的共享,整个视频服务器由五个线程相互配合完成。客户监控端采用Davinci-VLC客户端程序实现视频的监控及视频文件的备份。下一步的工作重点是研究基于WiFi+3G视频监控,以及保证视频数据在网络上的安全传输。
  参考文献:
  [1] TI. DaVinci? Technology ://,2008.
  . 兵工自动化,2010.29(4):75-77
  [3] 张多英,申晨,刘伟平,黄红斌.嵌入式视频监控传输系统的设计与实现[J].计算机工程与设计,2010.31(4):724-728
  [4] 郭波,樊丁,彭凯.基于DaVinci技术的嵌入式视频监控系统设计[J].安防科技,2010.1:22-24,6
  [5] Texas Instruments. Codec Engine Application Developers Guide[EB/OL].http://Codec_Engine_Application_Developers_Guide,2010.

上一篇:基于HIS的医院分诊排队显示系统设计的策略分析

下一篇:基于SNMP 的HFC 双向网络设备的设置分析