APP下载

基于ARM11的IP网视频监控系统设计与实现

2012-06-26徐继富张秋林

电视技术 2012年17期
关键词:线程嵌入式终端

徐继富,张秋林

(空军工程大学电讯工程学院,陕西 西安 710077)

进入21世纪,视频监控技术的应用日趋广泛。然而,目前的网络视频监控系统多是以DSP芯片或者ARM9芯片为核心开发的。基于DSP芯片的视频监控系统虽然在视频信号处理上优势明显,但其在智能化控制上的短板极大地限制了它的应用;基于ARM9的监控系统虽然能够克服DSP芯片的不足,但是其在视频信号处理能力上的不足,使其不得不依靠专业的多媒体芯片来完成视频信号的处理,而这无疑将增加制造成本。然而,新一代的ARM11处理器由于其内嵌了多媒体处理模块MFC,使其在视频监控系统的开发中具有极大的优势。因此,基于ARM11的视频监控系统的研究成为目前视频监控系统研究的热点。本文介绍的视频监控系统主要是根据某单位的项目需求而进行的研发。

1 基于ARM11的IP网视频监控系统

监控系统包括监控前端、监控终端和网络三个部分,监控前端是一个运行Linux操作系统的嵌入式系统,它通过S3C6410接收摄像头采集到的数据,并传送给硬件编解码(MFC)模块,并把得到的经过H.264压缩的数据打包发送到IP网络上,监控终端(PC机)通过网络接收数据包,经过解码实时播放。总体构架如图1所示。

图1 基于ARM11的视频监控系统

2 硬件设计

在该网络视频监控系统中,监控前端主要由视频采集模块、主控制模块和网络传输模块等组成。其硬件框架[1-2]如图 2 所示。

图2 硬件结构框图

本系统中S3C6410处理器用于接收控制摄像头所获取的视频信号,其内部集成有用于进行基于H.264压缩编码的多媒体编解码器(MFC)。此外,JTAG主要用于程序的下载;SDRAM用于存取系统运行时的程序;NAND Flash用于存储固化程序;串口用于调试程序和打印输出信息。

系统主芯片采用最新的ARM11处理器S3C6410。Flash为32 Mbyte的NAND型,存放有嵌入式视频采集前端的根文件系统、启动代码和内核代码。并且在Flash管理方面,根文件系统采用的是最新的YAFFS可读写文件系统。为了使本系统能够稳定运行,本系统采用2片共64 Mbyte的SDARM,这样就可流畅地运行Linux系统及应用程序。网卡采用AX88796以太网控制器,该网卡是10/100 Mbit/s自适应通信速率,通过它可实现以太网的物理层和数据链路层的连接。摄像头采用市场上普通的模拟摄像头,通过SAA7113芯片,摄像头采集的模拟信号将被转化成数字信号传送给MFC模块。

3 监控前端软件设计

监控前端的软件设计由嵌入式系统构建和应用软件组成。嵌入式系统部分包括Bootloader、Linux内核、交叉编译器、驱动等,具体构架如图3所示。

图3 嵌入式系统软件结构框图

基本的嵌入式运行环境由引导程序、Linux内核和设备驱动程序构成。应用层软件通过控制Camera IF接口接收摄像头(SAA7113)采集的数据,并将其传送给硬件编解码(MFC)模块;然后把从MFC模块得到的H.264码流打包发送到IP网络上;监控终端通过网络接收视频数据包,并解码实时播放。

3.1 嵌入式Linux操作系统的定制

本系统采用Linux2.6.21作为嵌入式平台的操作系统。在对Linux内核进行裁剪后,保留了本系统所需的NAND Sevice Support、MTD分区、UDP协议以及套接字、NFS文件系统、framebuffer等驱动。通过运用交叉编译器编译,即可得到ARM处理器能够运行的文件。再将镜像文件通过Bootloader下载到目标板的Dataflash中[3]。

3.2 应用层软件的开发

应用层软件是本系统的核心,主要功能是响应用户的连接请求、视频采集、编码压缩和数据发送[4]。该程序的实现过程主要包括2个线程:第1个为主线程,第2个线程主要任务是处理用户的连接。

第1个线程的流程如图4所示。

图4 主函数流程图

第2个线程的流程如图5所示。

图5 用户线程流程图

3.2.1 网络传输模块

网络传输模块的功能是为了实现H.264视频码流的传输。现行的网络通信协议主要有TCP/IP协议和UDP协议。为了提高视频码流的传输速度和实时性,本设计采用UDP协议作为C/S模型的网络通信协议。在监控前端,网络编程通过socket接口进行,通过listen()函数和send()函数完成客户端的监听、连接的建立和数据的发送等功能[5]。网络编程过程中用到的socket函数主要有:

1)int listen(SOCKET s,int backlog)

listen函数的作用是将制定的套接字设置为侦听模式。其中,第1个参数是套接字描述符;第2个参数(backlog)是等待连接队列的最大长度。

2)int bind(SOCKET s,const struct sockaddr FAR*name,int namelen)

通过bind函数,将创建的套接字绑定在本地的某个地址或端口上。参数SOCKET用来指定需要绑定的套接字,而参数name主要用来指定该套接字的本地地址信息;参数namelen则用于指定该地址信息结构的长度。

3)int send(SOCKET s,const char FAR*buf,int len,int flags)

send函数主要借用已建立连接的套接字进行数据发送。参数SOCKET代表已经建立连接的套接字;参数buf则用于指向一个缓冲区;参数len是已经制定的缓冲区的长度;参数flags设定的值一般为0,该参数的设置值将影响函数的行为。

4)int recv(SOCKET s,char FAR*buf,int len,int flags)

recv函数的主要功能是从一个已连接的套接字接收数据。参数SOCKET用于接收数据而建立的套接字;参数buf用于指向一个用来保存数据的缓冲区;参数len表明所指向的缓冲区的长度;参数flags通常设置为0。

5)SOCKET accept(SOCKET s,struct sockaddr FAR*addr,int FAR* addrlen)

accept函数用来接收客户端发送的连接请求。参数SOCKET是套接字描述符;参数addr是指向一个缓冲区的指针;参数addrlen是指向一个整型的指针。

3.2.2 视频编码模块MFC

本文采用MFC模块进行H.264视频压缩编码,主要原因是多媒体编解码模块MFC被集成到S3C6410处理器内部。MFC模块具有高性能的视频编解码功能,支持MPEG-4,H.263,H.264 的编解码[1]。本文采用 H.264 编码,其工作流程如图6所示。

图6 MFC应用程序流程图

其中,在调用MFC模块中要用到的主要语句有:

4 客户端播放程序设计

监控终端是一台运行Windows系统的PC机,主要负责从网络接收压缩包,并使用Avcodec进行解码显示[6-8],其主程序工作流程如图7 所示。

图7 客户端程序流程图

终端监控打开后,程序首先试图读取用户设定的参数。得到参数后,PC机端就会创建套接字,并与监控前端建立连接。正确连接后,监控终端就会向前端发送视频请求,监控前端在接收到服务请求之后会将视频数据发送到PC终端。PC终端在接收到视频码流之后通过ffmpeg解码后显示。同时,视频接收端不停地判断用户线程是否保持运行,只要用户线程一直保持运行,客户端就不停地向监控前端请求视频数据,PC端就可得到连续的视频画面。

5 系统性能测试

测试环境为:内线采用速率为10 Mbit/s的实验室局域网Intranet;客户端采用PC机,主频为2.7 GHz,内存为2 Gbyte;监控前端为本文设计的ARM11视频采集前端。系统中设置采集分辨力为640×480,视频监控效果如图8所示,视频播放速度达到了30 f/s(帧/秒),在监控移动目标时比较流畅,无抖动现象,达到了设计要求。

图8 监控终端

6 结束语

本文实现了基于ARM11芯片的IP网络视频监控系统。由于该方案采用了新一代的ARM11处理器和先进的 H.264视频压缩技术,使其具有如下优点:1)S3C6410微处理器内嵌的多媒体处理模块MFC,使该系统在硬件设计上无须考虑视频编解码部分,大大降低了成本,缩短了研发周期;2)先进的H.264视频压缩技术的采用,使该系统能够实现对视频数据的高度压缩,大大减少了系统对网络带宽资源的占用,非常适用于带宽资源受限的网络环境。

[1]郭巧云,许雪梅,李岸,等.基于ARM11的无线视频监控系统的设计[J].计算机测量与控制,2010,18(8):1786-1789.

[2]唐永彬,杨恢东,墨芹.基于ARM11的嵌入式Web网络监控系统设计[J].电视技术,2011,35(9):122-124.

[3]罗蕾.嵌入式实时操作系统及应用开发[M].北京:北京航空航天大学出版社,2005.

[4]冯丽芳,孙俊,周俊华,等.基于ARM9的网络视频监控系统实现[J].电力自动化设备,2006,10(26):95-98.

[5]孙琼.嵌入式Linux应用程序开发详解[M].北京:人民邮电出版社,2007.

[6]张云川,王正勇,卿粼波,等.基于ARM的便携式视频解码终端设计与实现[J].计算机工程,2009,24(35):232-234.

[7]郭盛荣.基于Linux的开放式媒体播放器研究[D].重庆:重庆大学,2006.

[8]林德彬,赵慧民,谭恒良.基于ARM嵌入式局域网视频监控系统的设计与实现[J].电视技术,2006,30(9):88-89.

猜你喜欢

线程嵌入式终端
X美术馆首届三年展:“终端〉_How Do We Begin?”
通信控制服务器(CCS)维护终端的设计与实现
搭建基于Qt的嵌入式开发平台
浅谈linux多线程协作
嵌入式软PLC在电镀生产流程控制系统中的应用
多功能北斗船载终端的开发应用
Altera加入嵌入式视觉联盟
倍福 CX8091嵌入式控制器
ABB Elastimold 10kV电缆终端及中间接头
Linux线程实现技术研究