嵌入式学习小组
直播中

李冬茗

7年用户 183经验值
私信 关注

请问怎样去设计一种视频监控服务器?

本文介绍了一种基于最新Davinci平台的视频监控服务器的设计与实现,包括硬件组成和软件设计。

回帖(1)

李之涵

2021-6-3 15:06:37
  1.引言
  多媒体监控一直是人们关注的应用技术热点之一,它以直观、方便、信息内容丰富等特点被广泛应用于许多场合。而随着嵌入式系统和视频压缩技术的不断发展,基于嵌入式技术的视频监控系统也得到了快速的发展与应用。其通过把摄像机输出的模拟信号转化为数字信号,再经过嵌入式系统编码和传输。在客户端,通过安装监控软件,或者直接通过Web进行监控。采用嵌入式Linux操作系统的视频监控系统具备编码处理、网络通信、自动控制等强大功能,直接支持网络传输和网络管理,使得监控范围达到了一定的广度。
  此外,嵌入式处理器的发展也日新月异,有专注于控制的ARM系列处理器,擅长快速计算的DSP处理器,还有一些针对性非常强的处理器,可以实现硬件视频编解码等。而德州仪器(TI)新近推出的针对便携式高清(HD)视频产品市场的达芬奇(DaVinci)处理器TMS320DM355处理器,结合了它们的特长。其内部具有一个ARM9EJ-S的主处理器,负责整个系统的控制,同时也集成了一个MPEG/JPEG协处理器,专注于MPEG/JPEG算法的实现。其内部的视频处理子系统(VPSS)及其它外设可方便快速的实现视频的采集、预处理、显示、网络传输等功能。同时,其低廉的价格也为用户降低了成本。而本设计即选用此处理器。
  2.视频监控系统整体框架
  本嵌入式网络视频监控系统由视频服务器、网络传输链路、客户监控端等3部分组成。视频服务器负责音视频等数据的采集、压缩处理等,网络传输链路将视频服务器压缩和发送的多媒体数据进行传输,而客户端监控部分接收音视频数据,进行解压、显示以及对视频服务器的控制等。整个系统的示意图如图1所示。
  
  图1视频监控系统示意图
  2.1.视频服务器
  视频服务器采用德州仪器(TI)新近推出的达芬奇(DaVinci)系列处理器TMS320DM355作为主处理器,接收CCD摄像头采集的视频信号,进行预处理及MPEG4压缩,然后将压缩后的数据通过网络传输。同时,接收上位机发送的命令,解析并且执行。每个设备都具有唯一的ID,当客户端进行连接时,服务器会首先检查ID号是否匹配,以防止恶意连接。此外,当视频服务器运行异常时,其内部的守护进程会进行监视,适当的时候进行重启。
  2.2.网络传输链路
  网络传输链路负责多媒体数据的传输。此处,可以根据实际需求,进行网络传输链路的选择。局域网(LAN)、无线局域网(WLAN)、INTERNET、CDMA、3G等都是可供选择的传输链路。其中,局域网(LAN)和无线局域网(WLAN)带宽充足、稳定,并且设备简单,易于实现,但会受到距离的限制。INTERNET和CDMA网络可以使监控距离得到扩展,但是其带宽受限,图像质量会受到影响。而最新的3G网络也是一个不错的选择,带宽在静止状态下可以达到2Mbps,但是其在稳定性方面还待测试。用户可以根据自己的需求进行选择,或者直接搭建专线网络,以实现各自的监控指标。
  2.3.客户监控端
  客户端主要与各个视频服务器进行连接,以实现监控。客户端可以采用PC机或者便携式设备,与网络传输链路相连,通过上位机软件与视频服务器连接,接收视频服务器发送的多媒体数据,进行解码,然后在上位机显示。同时,向视频服务器发送控制命令,实现云台、镜头等的控制。3.视频服务器硬件设计3.1.整体框架视频服务器完成视频的采集、MPEG4压缩和网络传输,以及云台、镜头等的控制。其硬件结构框图如图2所示。
  
  图2视频服务器硬件结构框图
  4.1.系统上电及引导程序
  系统上电时,是由DM355的输入引脚BTSEL[1:0]来决定从ROM或者AEMIF启动。此设计处选择从ROM启动。此时,系统直接跳转到内部ROM的起始地址(0X00008000)执行指令。内嵌的ROM启动代码(RBL)进行一些配置操作,然后读取BOOTCFG寄存器来决定是从NAND、MMC/SD或者UART启动。本设计选择NAND启动。NANDflash里预先烧写好了U-boot、Linux内核以及根文件系统。NAND启动以后,会读取bootloader的stage1部分的指令对系统进行必要的设置,然后将stage2部分的代码搬移到SDRAM中进行执行。当用户选择启动内核时,bootloader将内核从NANDflash里搬运到SDRAM,然后跳转到内核的起始地址进行执行,启动内核。
  4.2.嵌入式Linux操作系统
  嵌入式Linux操作系统是针对不同的应用需求,对Linux内核进行裁剪修改使之能在嵌入式计算机系统上运行的一种操作系统。它开放源码,内核小、效率高,适用于多种CPU和硬件平台,性能稳定,可移植性好等特点为其开辟了一片属于自己的空间。
  本设计选择嵌入式Linux操作系统作为软件平台,实现各硬件模块的驱动的添加及移植,用户应用程序的编写及调试。
  4.3.用户应用程序
  本设计中将整个应用程序分为2个进程,data进程和command进程。Data进程主要负责音视频数据的采集、压缩和网络传输。其中,又分为3个线程,capture线程、编码线程以及control线程。Capture线程控制采集设备进行图像及声音的采集及预处理;编码线程从capture线程读取数据,进行MPEG4(视频)或G.711(音频)压缩。Control线程从编码线程读取压缩完的数据,通过网络发送给客户端。而command进程接收上位机命令,解析、执行,并且控制云台,镜头及测温等。Command进程还加入了用户ID检验等功能,提供简单的保护机制。应用程序的流程图如图4所示。
  
  图4应用程序流程图
  4.4.MPEG/JPEG协处理器编码
  由于DM355内部集成了MPEG/JPEG协处理器,对于音视频的编解码主要是通过它来完成的。而对它的操作是依靠TI公司制订的基于eXpressDSP算法互用性标准(xDAIS)的xDAIS-DM标准实现的。此标准定义了一组统一的API,这些API是建立在各种多媒体算法之上的,这样即简化了集成难度,同时保证了互用性。TI提出的CodecEngine就是一组用于示例和运行xDAIS算法的API,而VISA(Video,Image,Speech,Audio)类是用来与xDAIS-DM算法标准定义的基于各种多媒体算法的API函数集进行交互的接口。在应用程序编程中,通过进行如下的操作来完成视频的编码。
  打开编解码引擎:
  staticStringengineName=“videnc”
  Engine_Handlece;Engine_Errorerrorcode;ce=Engine_open(engineName,NULL,&errorcode);视频编码类提供四个API函数:创建视频编码类:VIDENC_Handlehenc;staticStringencoderName=“mpeg4enc”;henc=VIDENC_create(ce,encoderName,NULL);其中ce为打开编码引擎时返回的句柄。对视频编码类进行控制,设置视频编码动态参数:VIDENC_control(henc,XDM_SETPARAMS,&dynamicParams,&encStatus);处理数据,进行编码:VIDENC_process(henc,&inBufDesc,&outBufDesc,&inArgs,&outArgs);其中参数henc为创建的VISA类句柄,inBufDesc为原始数据buffer,outBufDesc为压缩后数据buffer,inArgs和outArgs为输入输出配置参数。销毁创建的视频编码类:VIDENC_delete(henc);在应用程序中调用以上API,即可利用MPEG/JPEG协处理器对原始视频数据进行压缩,而音频数据的压缩与此类似。
  5.总结
  本文介绍了基于最新Davinci平台的视频监控服务器的设计与实现,包括硬件组成和软件设计。整个视频服务器利用DM355内部的ARM926EJ-S核运行嵌入式Linux操作系统,而用MPEG/JPEG协处理器进行MPEG4编码相关的计算。文中对利用MPEG/JPEG协处理器进行编码也做了介绍,同时给出了整个视频监控系统的框架。经过在局域网内测试,可以实现D1格式的视频的实时传输,同时可以进行云台及镜头等的控制。利用该系统可实现楼宇、街道等场所的视频监控。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分