吴大中 胡江浪
摘 要: 设计一种基于ARM的移动视频监控系统,介绍嵌入式系统下视频压缩、编解码库的移植与应用,视频流媒体的传输与控制。系统由视频采集端和移动监控端组成,视频采集端主要功能包括视频数据采集、压缩编码、传输及控制;移动监控端采用Android智能手机借助3G无线网络连接视频采集端,从而实现远程无线视频监控功能。实验结果表明,视频图像清晰、播放流畅、延时小且系统稳定可靠,达到了系统的设计要求。
关键词: 嵌入式系统; 视频监控; 流媒体; 视频传输
中图分类号: TN911.73?34 文献标识码: A 文章编号: 1004?373X(2016)04?0123?05
Abstract: A mobile video monitoring system based on ARM was designed. The video compression, coding, decoding library transplantation, and the transmission and control of stream media under the embedded system are introduced. The system consists of video data acquisition terminal and mobile monitoring terminal. The video data acquisition terminal includes video data acquisition, image compression coding, video transmission and control. The mobile monitoring terminal is connected with video acquisition terminal by means of Android smart phone via 3G wireless network to achieve the remote wireless video monitoring. Experimental results show the system is stable and reliable, its video image is clear; video play is fluent, time delay is short, which can meet the requirements of the system.
Keywords: embedded system; video monitoring; stream media; video transmission
视频监控系统作为现代楼层、区域管理的重要手段,在维护社会治安、协助交通管制、家居安防等领域做出了巨大贡献[1]。传统的视频监控设备大部分基于PC平台,而PC机体积相对较大,移动性差,不适合随身携带。近些年来,随着移动通信技术及流媒体技术的不断发展,人们对视频监控提出了新的需求,移动远程视频监控系统应运而生。相比传统的视频监控系统,移动视频监控具有体积小、使用便捷、高效、覆盖范围广、实时性强等优点[2]。视频数据信息量非常大,对网络带宽的要求较为苛刻,因此视频数据在传输之前必须对其进行压缩编码处理,减少视频传输中网络负担。由于移动视频监控系统通过无线网络传输视频信号,尽管视频数据经过压缩处理,但考虑到无线信道的复杂性及传输带宽的不稳定性,在视频信号传输过程中难免会出现数据包的丢失,进而导致接收端视频解码质量的下降。因此,本文利用流媒体技术对视频数据进行打包处理,实时监控网络环境并反馈给视频发送端,本文在此基础上设计并实现了基于ARM的移动实时视频监控系统。
1 系统总体设计
本文设计并实现了采用三星S3C6410微处理器芯片作为主控制器的移动实时视频监控系统。移动视频监控系统包括硬件系统和软件系统。操作系统基于嵌入式Linux?2.6.30.4操作系统,硬件部分以S3C6410微处理器为核心,利用高清摄像头实现视频采集,无线网络实现视频传输,手机端实时解码显示的功能。系统软件部分主要由应用软件、根文件系统、Linux系统内核、硬件驱动程序、Bootloader引导程序组成,应用软件负责视频采集、压缩编码及传输;系统硬件部分包括嵌入式ARM微处理器芯片,SDRAM,FLASH,LED警示灯及各种外围电路接口。系统采用USB接口摄像头采集视频数据,视频处理模块对视频进行压缩编码,3G无线发射模块完成视频数据的传输,系统总体框图如图1所示。
2 系统硬件设计
系统硬件平台包括视频采集前端和移动监控端两部分。视频采集前端包括核心板模块、视频采集模块、视频数据压缩处理模块、液晶显示模块、无线传输模块、数据存储模块及电源模块;移动监控端采用Android智能手机作为实时监控设备。视频监控前端硬件组成结构如图2所示。
本系统利用S3C6410微处理器接收、控制摄像头采集的视频信号,利用开源多媒体编/解码器进行基于H.264编码标准的压缩编码;SDRAM用于系统程序的加载及应用程序中间数据的存储;NAND FLASH用于存储系统固化程序,例如Bootloader系统引导程序、Linux操作系统等;SD存储卡用于存储压缩后的视频数据;3G无线发射模块用于发送压缩编码后的视频数据。
2.1 S3C6410微处理器模块
S3C6410是韩国三星公司设计的16/32位的RISC微处理器,基于ARM 1176JZF?S内核,最高主频可达667 MHz,具有独立的Load/Store和8级流水线设计,集成了多格式的编解码器(MFC),支持MPEG4/H.263/H.264格式编解码,是一个低成本、低功耗、高性能的应用型微处理器[3],非常适合多媒体应用程序的开发。
2.2 视频采集模块
采用OMNIVISION公司生产的OV2640芯片作为CMOS数字图像传感器,该芯片向S3C6410提供SCCB和Camera Interface接口,支持YUV420P格式输出,另外其内部集成了模/数转换器和图像传感器。其实现原理是通过外界环境的图像投射到内部的图像传感器上,图像传感器完成光电转化,将光信号转换为电信号后,通过其内部的模/数转换器转化为数字信号经DSP芯片处理后,通过USB接口输出。OV2640和S3C6410接口的连接线如图3所示。OV2640的DATA[7:0]与S3C6410的CAMDATA[7:0]相连,实现两者之间的数据传输。OV2640的系统时钟SCLK与S3C6410的CAMCLK相连,用来解决传输数据时,同步时钟信号。S3C6410通过I2C总线对OV2640内部寄存器进行读/写来控制该芯片。
2.3 3G无线传输模块
本文选用的无线传输模块AD3812是中兴公司推出的3G无线传输模块,该模块支持WCDMA/CDMA 2000等多种制式[4],上传速率可达2 Mb/s,下载速率最高可达7.2 Mb/s。该3G无线模块提供SPI和SDIO接口,通过其中一个接口将视频信息传输给远程的Android手机端。选择联通WCDMA网络作为无线传输网络,相比另外两家电信运营商,联通3G网络上/下行速率更快,如表1所示。
3 系统软件设计
系统以嵌入式Linux操作系统作为应用软件运行环境,使用U?boot作为系统引导程序,系统内核采用Linux?2.6.30.4版本,Linux系统的根文件系统选用yaffs2文件系统。针对不同应用开发平台对操作系统内核进行裁剪、移植、配置,使Linux系统适用于硬件开发平台。其中应用程序是整个系统最重要的组成部分,而应用程序中以视频压缩编码、视频流传输控制、视频解码三部分最为重要,下面重点阐述应用软件的总体设计、编码库的移植、流媒体传输及移动端视频解码程序设计。
3.1 软件总体设计
视频信号的数据量非常大,必须对其压缩编码处理,使之适合信道传输,减少视频存储空间。H.264视频编码标准因其独有的网络适应性、丰富的编解码算法得到了广泛地使用。本文正是基于H.264编码标准的X264编解码库实现对采集视频的压缩编码。对于压缩编码处理后的视频数据通过RTP/RTCP流媒体传输协议将其打包,借助UDP/IP协议实现视频流的IP格式封装后,通过3G无线网络将视频数据发送到移动端。移动端接收H.264格式视频码流,利用FFmpeg开源编解码库实现视频码流的解码与播放。视频传输流程如图4所示。
3.2 视频采集
V4L2(Video Four Linux Two)是Linux系统内核中的一种通用的视频设备驱动,不同厂家的视频设备只要满足UVC(USB Video Class)标准即可在Linux系统下使用,可以通过在Linux下使用命令lsusb查看该设备是否可以在Linux系统下使用。如果Linux系统下不支持该类视频设备,需要编写视频设备的驱动程序,可以选择加载视频驱动程序到系统中或以模块的方式挂载.ko驱动程序。视频设备在用户空间通过调用各种ioctl()函数完成对采集设备的设置。Linux下应用程序获取采集视频数据主要通过read/write和内存映射两种方式,其中read/write方式在系统所在内核空间不断拷贝数据到用户空间,此种方式相对简单,但耗费大量的系统资源,效率比较低。内存映射方式通过把系统内核空间地址直接映射到用户空间,采用mmap()函数进行内存的映射,用户直接操作内存空间即可,避免了数据从内核空间拷贝到用户空间[5?6]。视频采集主要函数及控制命令如下:
(1) open(“/dev/video0”,O_RDWR):打开视频设备文件,此处可以选择以阻塞方式或者非阻塞方式打开视频采集设备,此处以阻塞方式打开视频设备。
(2) VIDIOC_QUERYCAP:取得设备的capability,查询视频设备是否具备音视频输入/输出功能。
(3) VIDIOC_S_INPUT:选择视频输入格式,可以选择单输入模式或多输入模式。
(4) VIDIOC_S_FMT:视频制式及帧格式设置。
(5) VIDIOC_REQBUFS:分配视频存放内存。
(6) VIDIOC_STREAMON:开始视频数据的采集。
(7) VIDIOC_DQBUF:从内存空间读取视频数据。
(8) VIDIOC_QBUF:释放内存空间并把内存空间放回缓存队列,等待重新获取视频数据。
(9) VIDIOC_STREAMOFF:停止视频采集程序。
其中V4L2的视频采集操作流程如图5所示。关于视频属性、帧格式、视频捕获格式、视频设备支持的详细参数设置可以通过查询V4L2手册,此处不再赘述。
3.3 X264编码库移植
本文采用X264开源编码库对采集视频进行压缩编码。X264是开源的视频编码库,用于对采集的视频数据进行H.264标准格式的压缩编码,H.264支持帧内预测、帧间预测、多帧预测、熵编码及多模式运动估计技术,在相同图像条件下H.264编码压缩后的数据量相比MPEG4提高了约55%,使得视频信号更易于通过无线网络传输[7]。另外X264编码库相比JM,T264编码库而言简洁、高效、更注重实用性,抛弃了对视频编码影响较小而计算复杂度较大的算法实现部分。H.264编码结构框图如图6所示。
X264编码库的移植基本步骤如下:
(1) 首先在宿主机中建立交叉编译环境,下载X264开源编码库,本文采用的是x264?snapshot?20120423?2245版本库文件,交叉编译器采用arm?linux?gcc 4.3.3,解压该库文件到特定目录下,这里选择目录为/usr/local/x264。
(2) 命令行状态下输入./configure??host=arm?linux??prefix=/usr/local/x264 ?enable?shared ??disable?asm;进行运行环境配置。
(3) 修改config.mak文件中cc=gcc为cc=arm?linux?gcc;LD=gcc?o为LD=arm?linux?gcc?o;ar=ar rc改为ar=arm?linux?ar rc;ranlib=ranlib改为ranlib=arm?linux?
ranlib。
(4) 命令行状态下输入make; make install;在/usr/local/x264目录下生成libx264可执行文件,复制该文件到ARM目标板,移植结束。
3.4 视频流媒体传输
对于压缩编码处理后的视频数据,通过RTP/RTCP流媒体实时传输协议将其打包,借助UDP/IP协议实现视频流的IP格式封装后,通过WiFi无线网络将视频数据发送到移动端。本方案使用的RTP/RTCP协议是一种实时传输控制协议,实时传输协议(Real?time Transport Protocol,RTP)是一种提供点对点或者点对多点传输服务的实时传输协议[8?9]。但它本身无法为按顺序传输的数据包提供可靠的传输机制、流量控制及拥塞控制。它利用实时传输控制协议(Real?time Transport Control Protocol, RTCP)来对拥塞及流量控制提供支持。本文采用JRTPLIB?3.9.1版本开源函数库来实现RTP/RTCP的实时传输。JRTPLIB是利用C++面向对象语言实现的开源RTP/RTCP函数库,采用其中的库函数可以开发出高质量的视频传输应用程序。由于软件实现需要在嵌入式ARM平台上运行,因此需要对JRTPLIB库针对ARM平台进行裁剪、优化、交叉编译。由于JRTPLIB库需要jthread包的支持,首先下载jthread?1.3.1压缩包及arm?linux?gcc?4.3.3交叉编译器,解压JRTPLIB库和jthread包至特定安装目录,在Linux命令行状态下对相关参数进行设置,编码安装即可。RTP包传输流程图如图7所示。
3.5 视频解码
Android手机端视频解码采用FFmpeg编解码库实现对基于RTP/RTCP协议传输的H.264视频码流的解码[10]。FFmpeg提供音视频编解码、录制、转化、解码视频的缩放及音视频流化的完整解决方案。FFmpeg支持FLV,MPEG,DV等多种编码格式,以及MPEG,AVI,ASF和H.264等90多种解码格式。由于Android系统自带的OpenCore多媒体框架支持的多媒体格式有限,因此本文采用FFmpeg作为系统视频流的解码方案。而FFmpeg开源解码库并不能直接运行在Android平台,需要对FFmpeg库进行裁剪移植,使之适用于Android平台。FFmpeg库移植过程中要注意config.h和config.mak两个文件进行配置参数的修改,移植完成后产生libffmpeg.so动态链接库文件,Android平台Java层通过JNI(Java Native Interface,JNI)方式调用动态链接库实现对视频码流解码[11?12]。解码视频流为YUV420格式,Android系统无法直接显示,使用sws_scale()函数对YUV420格式转为RGB格式,Android系统可以直接对RGB格式图像渲染显示。
其中解码过程中涉及的主要函数功能描述如下:
(1) avcodec_init():初始化libavformat/libavcodec解码库,申请解码需要的内存空间,为接下来解码做准备。
(2) av_register_all():注册所有的编解码器以及解析器、码流过滤器,实现对特定码流格式的编解码。
(3) av_open_input_file():打开输入的视频码流文件。
(4) av_find_stream_info():从文件中提取码流信息,利用AVFormatContext结构体输出视频对应的码流参数信息。
(5) codec_type_video():查找对应的视频流格式。
(6) avcodec_find_decoder():查找对应的解码器。
(7) avcodec_open():打开对应编解码器。
(8) avcodec_alloc_frame():为将要解码视频帧分配内存空间,存储解码后视频数据。
(9) av_read_frame():从视频码流中不断提取视频帧数据,为下一步的解码作准备。
(10) avcodec_decode_video():进行帧的类型的判定并根据需要进行帧格式转化后保存。
(11) avcodec_close():完成视频编解码,释放解码器。
(12) av_close_input_file():关闭输入的视频码流文件,停止解码视频文件。
4 系统测试
在本次实验中,视频采集前端采用基于ARM 1176JZF?S内核的实验板,手机端测试系统为Android 4.1系统。在Android手机应用程序窗口输入远端实验板的IP地址及端口号,实现手机与实验板连接。视频采集端监控画面如图9所示。鉴于3G无线网络的不稳定性,系统在无线网络不同上行速率的情况下对视频数据压缩率、传输时间进行了测试。表2为采用联通WCDMA网络传送视频数据时,视频采集端数据压缩率及数据传输时间。
5 结 语
本文设计并实现了一种基于嵌入式ARM平台和3G网络的移动视频监控系统,分别在PC端和手机端实现了视频的解码与播放。PC端利用VLC播放器实现H.264视频流的解码与播放,针对Android平台开发手机端视频监控应用程序,监控效果如图10所示。
实验结果表明,系统在3G网络覆盖条件下帧率可达20 f/s,图像清晰、播放流畅,能够满足远程移动视频监控的要求。相对目前市场上类似的设备,本文提出的基于ARM的移动实时视频监控系统,体积小、结构简单、成本低,具有广阔的市场应用前景。
参考文献
[1] 卢秋波.视频监控技术简介与发展趋势[J].安防科技,2007 (5):21?23.
[2] 贺礼,唐伦,陈前斌,等.移动视频监控系统的设计与实现[J].电视技术,2007,31(6):59?62.
[3] Samsung Electronics. S3C6410x32?bit RISC microprocessor user manual (revision 1.2). [EB/OL]. [2011?08?10]. http://www.samsung.com.
[4] 张成伟,程文青,黑晓军.基于Android平台的3G移动网络测量研究及性能分析[J].计算机科学,2015,42(2):24?28.
[5] 黄俊伟,巴义.基于V4L2移动视频监控系统的设计[J].电视技术,2012,36(17):159?161.
[6] 钱华明,刘英明,张振旅.基于S3C2410嵌入式无线视频监控系统的设计[J].计算机测量与控制,2009,17(6):1132?1134.
[7] 杨宇,何小海,吕瑞.基于H.264标准的码率控制算法[J].计算机应用,2009,29(3):675?680.
[8] 陈明,梁兴东,吴一戎.基于H.264的嵌入式无线视频监控系统[J].微计算机信息,2008,24(14):10?12.
[9] 贺礼,陈前斌,唐伦,等.基于3G无线网络实时传输MPEG?4流媒体的设计与实现[J].计算机应用研究,2008,25(6):1856?1859.
[10] 胡成,任平安,李文莉.基于Android系统的FFmpeg多媒体同步传输算法研究[J].计算机技术与发展,2012,21(10):85?88.
[11] 刘诚,段红光,巴义.基于Android移动视频监控系统客户端的研究与设计[J].电视技术,2013,37(4):86?87.
[12] 祝俊峰.基于Android的智能视频监控系统的研究与实现[D].武汉:武汉科技大学,2013.