摘要:提出了一种以嵌入式微处理器S3C6410为核心,利用Qt4构建应用软件平台,采用MPEG-4协议压缩视频数据的网络视频监控系统设计方案;简要分析了系统功能需求,确定了系统设计的总体方案;按照模块化的思想,设计了各个功能模块;分析MPEG-4视频编码基本方法,叙述了在软件上实现MPEG-4编解码的实现方法;实验结果表明客户端图像清晰,服务器稳定运行,基本满足实时性的要求。本设计方法灵活,成本较低,易扩展,具有一定的实用价值。
关键词:S3C6410;Qt4;MPEG-4;视频监控
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2013)02-0383-03
随着嵌入式网络技术和多媒体技术的发展,网络传输数字化视频的流媒体技术的应用也日益普及。因此本文尝试设计一款基于通用嵌入式平台、价格较为低廉、采用有线或无线网络接入技术的视频监控系统,可以应用于一些对实时性要求不高的场合。
该网络视频监控设计为C/S模式,由客户端和服务器端构成,需要进行监控视频图像的客户端向服务器发送请求,服务器将视频图像处理后发送给客户端,通过安全可靠的传输,最后视频图像在客户端进行解码显示。
1 总体方案设计
本设计是基于S3C6410为核心的硬件平台和嵌入式Linux的网络视频监控系统。系统采用C/S网络架构,该体系由两大部分组成。以ARM处理器的嵌入式Linux平台作为服务器端,主要完成图像采集、视频编码、网络传输等功能;以S3C6410处理器为核心的嵌入式Linux平台作为客户端,主要完成网络接收、图像实时播放、系统控制等功能。其网络拓扑如图l所示。
图1 系统网络拓扑
2 系统硬件设计[1]
IP Camera的硬件电路主要包括ARM处理器(S3C6410)、1GB的NandFlash(K9K8G08U0B)和256MB的DDR RAM(K4X1G163PE)、外设接口等。其中,外设接口部分包括RS232串口、JTAG口、USB口、LCD接口、以太网口(DM9000)等。在本系统中视频采集模块采用USB接口与S3C6410进行通信,USB接口接收视频采集模块发送过来的视频数据,经过压缩后,通过以太网发送。
客户端与服务器端相比,少了一个USB摄像头模块,增加了TF卡接口。其中TF卡接口用于存储图像抓拍和视频录制的数据,从而满足用户图像和视频回放的要求。
3 系统软件设计
本系统由服务器和客户端两部分应用软件构成。由于各功能模块的对称性,同时按照面对对象的程序设计思路,系统设计了TCP服务器与客户类、控制命令协议类,外设接口类,视频采集类,Xvid编解码类,帧缓冲队列类,视频帧显示类。其系统模型如图2所示。
图2 软件系统模型图
3.1 TCP服务器及客户端程序
TCP协议的程序使用的是C/S模式,在Qt4中提供了QTcpSocket类来编写客户端程序,使用QTcpServer类编写服务器端程序。在服务器端进行端口的监听,一旦发现客户端的连接请求,就会发出newConnection()信号,关联这个信号到数据发送的槽函数。在客户端,一旦有数据到来就会发出readyRead()信号,关联此信号,进行数据的接收。
3.2 控制命令协议
在本系统中,主要通信对象为视频数据,除此而外还有一些不同类型的控制数据需要处理,所以提出一种较为简单的控制命令通信协议,其具体结构表1所示。
表1 应用层网络控制命令通信协议
[描述\&所占字节\&协议内容\&协议头\&4(int)\&帧长度\&4(int)\&类型码\&数据\&n\&帧内容\&]
3.3 视频采集
本系统中服务器通过基于ZC301的USB摄像头,利用Linux系统的视频内核V4L2(video 4 linux 2),实现现场图像的采集[2]。V4L2支持内存映射方式(mmap)和直接读取方式(read)来采集数据,前者一般用于连续视频数据的采集,后者常用于静态图片数据的采集,因此本设计采用了内存映射方式的视频采集。
3.4 Xvid编解码
本系统采用基于MPEG-4的编码压缩。MPEG-4在嵌入式系统上有两种实现办法,一种使用专用的MPEG-4编码芯片,另一种通过软件实现。由于Linux系统下软件的通用性较好,因此本设计选用软件实现[3]。
3.5 帧缓冲队列
本次设计中,TCP客户端模块与显示模块各自运行在独立线程。TCP客户端线程完成一次图像接收后将图像原始数据放入共享缓冲队列内,接着进行下面的数据接收;视频显示线程在此时可以得到调度,从共享内存空间内将已经采得的上一帧视频数据进行显示,这就实现了视频接收的同时进行视频的显示,对于单线程的系统来说,这是不可能的,因此系统采用了多线程技术(在一定程度上提高了系统的性能)。当客户端线程再次接收一副图像后会继续进行,二者之间如此往复,实现视频图像的连续播放,直至系统停止或者被阻塞。在代码实现上,程序采用系统提供的线程同步接口,即信号量和互斥锁。
3.6 视频帧显示
1)YUV至RGB转换的代码实现
由于,从网络传输得到并解码的是YUV格式的原始视频帧,不能直接播放,还需要先进行格式的转换。针对需要的输入输出格式,通过convert_yuv_to_rgb_pixel(int y, int u, int v)函数实现YUV转换为RGB格式。
2)显示RGB图像至监视屏
在显示模块中,使用QImage类的成员方法loadFromData(m_pFrameDataRGB,
m_iFrameSizeRGB)保存RGB图像数据,再通过setPixmap类的成员方法setPixmap(QPixmap::
fromImage(*m_pImage,Qt::AutoColor))显示一帧图像到QLabel显示控件上。
4 系统测试与分析
1)服务器测试
服务器的Qt程序启动成功后,直接启动服务器,观察ServerStatus窗口状态,OK代表操作成功。测试系统连续运行时间为6个小时,期间无异常现象发生,运行良好。
2)客户端测试
完成局部性能测试后,对服务器与客户端进行整体的监控测试。将服务器与客户机均投入运行,进行多方网络视频监控,测试结果表明,系统运行稳定良好,画面清晰,图像较为流畅。如图3所示,客户机对2个场景进行监控的运行结果,每个场景均由一个服务器负责前端的视频采集与发送。从中可以看出访问的采集服务器一个IP地址为192.168.1.230,另一个为192.168.1.231,分别是Camera A和Camera B。需要说明的是,图中4个监控窗口都是从左上角的主窗口临时创建出来,也可以随时关闭,也就是说监控程序支持同时访问不同服务器;而上下2个监控图像都是一样的则成功验证了服务器支持多客户端的并发访问,因为采集服务器是多线程的软件架构。最后,左下角是System Monitor是Linux系统的工具,非本设计的部分,主要是从中观察网络当前的数据传输速率,实测4个通道的瞬时速率为138kbps左右。
图3 客户机运行界面
3)系统分析
从测试结果可以分析出,目前系统的主要瓶颈在于图像采集速度,全速状态下,每秒钟至多只能采集4帧。如果图像采集速度提升的话,未经过压缩就传输,网络带宽也不能满足要求,可以计算分辨率为320*240,BPP值为16的原始数据图像,其所占用的存储空间为1.17Mbit,这样的图像数据在10Mbps以太网环境下进行传输,理想情况下每秒钟至多传送8幅图,但实际情况网络带宽达不到10Mbps。如果采用MPEG-4对原始图像数据进行压缩,按平均压缩比为100:1来算,每秒钟传送12幅图片只需要144kbps的带宽,另外网络带宽提高到100 Mbps,则网络带宽便不再是问题。但是,实测表明,此时系统瓶颈会转移到CPU上来,因为S3C6410的最高主频只有500MHz,而且没有采用硬件编码,因此MPEG-4软编码速度很慢,进行频繁的数据压缩和内存拷贝再进行图像传输,效果也是得不偿失。
5 结束语
该文提出了一套基于S3C6410平台和Linux系统的嵌入式Qt4图像采集、传输及控制系统的具体实现,并给出了测试结果。测试结果表明,系统很好的完成了图像采集和传输,客户端图像清晰,服务器稳定运行,不会发生断开或退出的现象。该系统可以进一步开发,比如使用主频速度更高的ARM处理器,例如S5PV210,或配合经过ARM指令优化的 MPEG-4软件编码库,压缩帧速一般可以达到20fps,还可以采用专用的MPEG-4编解码芯片对原始图像数据进行编码,既可以解决网络带宽的限制,又可以解决CPU处理能力的限制。
参考文献:
[1] 陈友荣,杨海波,程菊花,等.基于Linux的无线视频传输系统设计与实现[J].中国有线电视,2010,(9):1047-1052.
[2] 杨经纬. 嵌入式无线IPCamera设计与实现[D].成都:西南交通大学,2008.
[3] 陈锬,盛向治,单宝松.基于MPEG-4的无线视频传输方案的研究[J].计算机应用研究,2007,24(11):281-282,288.
[4] 姚继锋,尹欣,吴瞻,等.Linux 应用实例与技巧[M].北京:机械工业出版社,2001.
[5] 范金刚.智能视频监控系统若干关键技术的研究与实现[D].成都:电子科技大学,2006.
[6] 孙弋.ARM-Linux嵌入式系统开发基础[M].西安:西安电子科技大学出版社,2008.
[7] 刘峥嵘,张智超,许振山著.嵌入式 Linux 应用开发详解[M].北京:机械工业出版社,2004.