基于FFmpeg的嵌入式网络视频监控系统
2014-11-17谭石坚
摘 要:视频监控正朝着嵌入式、网络化、无线化的方向发展。嵌入式视频监控系统已成当今数字视频研究的热点之一,如何加强视频监控实时性和准确性是视频监控技术中的主要重点。本系统采用FFmpeg作为编码工具,以ARM平台为基础,结合嵌入式技术、视频压缩编码技术、网络传输技术,设计一个低成本、高性能、易普及的嵌入视频监控系统。
关键词:视频监控;FFmpeg;H.264
1 系统总体框架
视频监控以视频编解码技术、计算机网络技术、数字信号处理技术和嵌入式系统为主要核心技术。本系统把从摄像机采集的模拟视频信号通过视频编码器直接转换成视频流,并通过计算机网络传输。具备视频编码处理、网络通信、系统控制等强大功能,直接支持网络视频传输和网络管理,使得监控范围达到前所未有的广度。
本系统采用“采集端-服务端-接收端“的C/S架构,硬件平台采用ARM嵌入式处理器和摄像头,操作系统基于嵌入式Linux[1]。整个系统分成分为三个部分,分别为采集端、服务端、接收端。采集端将采集得到的视频数据经过处理,转换成H.264格式。通过网络在服务端进行转发,在接收端将视频显示出来,系统总体框架如图1。
图1 视频监控系统框架图
采集端負责采集摄像头数据并使用FFmpeg进行H.264的视频编码[2]。通过网络向服务器发送视频数据。服务器端负责接收来自采集端的视频数据,然后接收客户端的视频请求,向客户端发送视频数据。接收端为用户客户端,负责接收服务器视频数据并且播放或者保存文件。
采集端是一个基于ARM的嵌入式系统,操作系统使用Linux操作系统,视频编码使用FFmpeg和H264提供的程序库。采集端系统架构如图2。
图2 采集端系统框架图
本系统的视频采集使用linux的video4linux2编程接口[3],而视频编码由FFmpeg+H264共同完成。在使用FFmpeg编码之前,首先需要对FFmpeg库进行初始化,注册所有的编解码器以及文件格式,设置编码器码率、帧速率、编码像素格式等参数,然后寻找编码器并打开,打开编码器之后才可以进行编码[4]。使用FFmpeg编码流程如图3。
本系统中的网络传输功能是一大重点。采集端将原始摄像头视频数据进过编码后,以网络方式传输到服务器上。在使用网络传输前需要对本机的网络进行初始化。以下是部分初始化网络程序[5]。
int sockfd = 0;
struct sockaddr_in addr;
bzero(&addr,sizeof(addr));
/*设置sockaddr_in结构体中的相关参数*/
addr.sin_family = AF_INET;
addr.sin_port=htons(PORT);
addr.sin_addr.s_addr= inet_a
ddr(SERVERIP);
/*创建socket*/
sockfd=socket(AF_INET,SOCK_STREAM,0);
/*调用connect函数主动发起对服务器的连接*/
if(connect(sockfd,(struct sockaddr*)&addr,sizeof(addr)) == -1){
perror("connect");
exit(1);
}
网络连接的初始化完成,一旦connect函数连接服务器成功,就可以随时与服务器进行数据收发。
至此,采集端已经完成了一帧视频数据的采集、压缩、网络传输这三个主要的过程。而视频监控的整个过程就是以上步骤的重复进行。正是由采集端传输的一帧一帧视频数据,最终传送到客户端,不断显示图像,达到视频监控效果。
2 结束语
本系统采用ARM嵌入式系统实现了视频监控中的视频采集、编码和传输三个重要功能。与众多的视频传输设计相比,本设计采用了现今业内最常用的H.264视频编解码技术。具有一定的前沿性和比较高的市场价值。
参考文献
[1]嵌入式Linux应用开发标准教程(第二版)[M].北京:人民邮电出版社,2009.
[2]FFMPEG[Z].http://www.ffmpeg.com/[2012/9/28].
[3]Video4Linux2[Z].http://en.wikipedia.org/wiki/Video4Linux[2008/3/1].
[4]X264[Z].http://www.videolan.org/developers/x264.html[2005/12/12].
[5]UNIX网络编程 卷1:套接字联网API(第三版)[M].北京:人民邮电出版社,2010.
作者简介:谭石坚(1981,5-),男,籍贯:广东,硕士,主要研究方向是嵌入式系统设计,视频编解码,网络安全等。