基于ARM的视频数据采集传输系统的设计与实现
2014-08-08栾博悦张蓥赵慧元
栾博悦+张蓥+赵慧元
收稿日期:2013-05-27
作者简介:栾博悦(1990—),男,山东牟平人,学士生,研究方向:电子科学与技术。
文章编号:1003-6199(2014)02-0101-04
摘 要:对基于ARM的视频数据采集传输系统进行研究及设计,通过ARM新一代嵌入式开发平台,与现在流行的互联网及无线传输技术相结合,实现视频数据的采集和远程数据的传输。设计中采用嵌入式Linux系统通过USB摄像头进行视频数据的采集,解决图像的格式转换和MJPEG编码压缩的数据处理,以及通过软件的设计实现MJPEG格式文件到流媒体输出等问题,最终实现视频数据采集和传输。本系统有以下几个方面的应用:家庭环境的实时监测、家居的智能化控制、高危车间厂房无线监控与控制、中长距离的家庭视频通讯、企业实时视频监控等。
关键词:嵌入式;视频;数据采集;传输
中图分类号:TP368文献标识码:A
Design and Implementation of Video Data Acquisition and Transmission Based on ARM
LUAN Boyue,ZHANG Ying,ZHAO Huiyuan
(Beijing Institute ofTechnologu,Zhuhai,Guangdong 519085,China)
Abstract:The video data acquisition and transmission based on ARM is discussed in this paper. through a new generation of ARM embedded development plaform,and combined with internet and wireless transmission technology,implementation of video data acquisition and remote data transmission.Usingembedded Linux system through the USB camera for video data collection,solve the image format conversion and MJPEG encoding date processing,designed and implemented through software MJPEG format output files to streaming media,finally achieved of video date acquisition and transmission.This system can be used for real-time monitoring of family environment and home intelligent control,in some highrisk factory workshop wireless monitoring and control ,can also be used in longdistance home video communications and realtime video surveillance in enterprise.
Key words:embedded system;video; data acquisition;transmission
1 引 言
随着人们日常生活工作的网络化,各种系统的无线化,以及多媒体技术、宽带网络传输技术的不断发展,视频数据的采集和传输已成为远程监控和工业自动化控制领域的一项核心技术。在日益成熟的ARM嵌入式开发平台下,其稳定性也大大提高,通过CMOS摄像头将视频信号数字化后再将视频数据进行压缩,经由网络模块上传至局域网或互联网,实现了视频数据采集传输。
2 系统总体设计
整个系统的设计分为三个部分:USB摄像头、ARM嵌入式开发平台、网络模块。系统整体结构如图1所示。
系统中所采用的摄像头是中星微公司生产的ZC301芯片的摄像头,该摄像头将CMOS图像传感器所产生的图像信号送到微处理器,处理后再转换为数字信号输出到外部设备。ARM嵌入式开发平台使用了三星公司S3C2440微处理器[1],其最高时钟频率为533MHZ,并且平台包括了256M的NAND Flash、4M NOR Flash、64M SDRAM 和一个USB host接口。USB host接口用于和摄像头相接。网络模块采用DAVICOM公司的以太网控制芯片DM9000CEP [2],该芯片装配有标准10M/100M自适应收发器,16K大容量FIFO,支持以太网接口协议,当从内存中接收到的压缩后的码流数据后,通过TCP/IP网络通信协议对数据进行打包,如果接收到浏览器向服务器的数据访问请求,则将数据发送至浏览器[3]。以太网芯片与嵌入式微处理器S3C2440接口电路如图2所示。
图1 系统整体结构
图2 以太网接口电路
计算技术与自动化2014年6月
第33卷第2期栾博悦等:基于ARM的视频数据采集传输系统的设计与实现
3 系统软件结构设计
系统的软件设计主要包括:视频设备的挂载,视频数据的采集,数据格式转换、编码压缩,视频数据传输等。本系统的视频图像显示涉及到了颜色空间转换问题,即对于现代数字图像传感器的数据输出格式一般为YUV/YCbCr 颜色格式对RGB颜色格式的一种转换。RGB色彩空间,其颜色在三维空间模型的3个轴分别对应着红(Red)、绿(Green)、蓝(Blue),模型内部的点对应不同颜色。YUV空间中颜色的三个分量为亮度Y(Luminance),色度U、V(Chrominance),其中YCbCr也是由YUV经过偏移缩放形成的。具体的转换关系如下所示[4]:
R = 1.164*(Y-16)+1.596*(Cr-128)
G = 1.164*(Y-16)-0.392*(Cb-128)-0.813*(Cr-128)
B = 1.164*(Y-16)+2.017*(Cb-128) (1)
视频数据的传输离不开网络,但是只有遵循一定的协议才能在网络中正确的实现数据的传送。其中TCP/IP(网络通讯协议)是因特网最基本的协议,也是互联网络的基础。TCP/IP通讯协议采用了4层的层次结构,分别是应用层、传输层、网络层、网络接口层,每一层都呼叫它的下一层所提供的网络来完成自己的需求。传输层协议主要是传输控制协议TCP和用户数据报协议UDP。应用层协议主要有:FTP、TELNET、HTTP(超文本传输协议)等,本系统所用的传输层协议是TCP协议,应用层协议为HTTP协议。
3.1 视频数据采集
系统实现视频数据采集主要是利用Linux操作系统中通用的Vedio 4 Linux 2接口[5]。Vedio 4 Linux是Linux操作系统中音视频设备统一的API,同时也可以提供无线电通信、文字电视广播解码和垂直消隐的数据接口。通过该接口就可以很方便的将视频数据进行采集。利用以下程序代码,可以任意按用户需要进行配置。
memset(&vd->cap,0,sizeof(struct v4l2_capability));
ret=ioctl(vd>fd,VIDIOC_QUERYCAP, &vd->cap);
获取摄像头基本参数
vd->fmt.fmt.pix.width =vd>width;
捕获视频宽度像素
vd->fmt.fmt.pix.height=vd>height;
捕获视频高度像素
Struct v4l2_streamparm*setfps;
etfps=(struct v4l2_streamparm*)
calloc(1,sizeof(structv4l2_stre-amparm));
设置视频帧频率
memset(&vd->rb, 0, sizeof(struct v4l2_requestbuffers));
vd->rb.count = NB_BUFFER;
设置视频帧缓冲区个数
for (i = 0; i < NB_BUFFER; i++) {memset(&vd->buf,0,sizeof(struc-t v4l2_buffer));
将帧缓冲区数据映射到内存
int uvcGrab(struct vdIn *vd);
获取一帧视频信号的图像。
视频数据采集具体流程如图3所示。
图3 视频采集流程图
3.2 格式转换和MJPEG编码压缩
由于不同的摄像头都有不同的输出格式,所以进行合适的格式转换是非常有必要的,由摄像头所采集到的原始数据并不适合用于传输,为了减少传输视频数据的码流大小还需要对图像进行压缩。本系统所用的摄像头输出YUV 4:2:2格式的图像数据,将图像数据转换为RGB格式,再通过调用Linux下的Libjpeg库对图像进行压缩。
格式转换以及压缩处理过程和基本代码函数名如下:
1)上锁全局变量的图像缓冲区(pthread_mutex_Lock)。
2)判断图像颜色编码格式,如果是YUV格式的颜色编码(以YUV4:2:2为例,调用compress_yuyv_o_jpeg函数)将一行YUV转换RGB,并将一行RGB压缩成JPEG格式[6],行加一,判断图像是否压缩到最后一行。如果是MJPEG编码格式输出的图像(调用int memcpy_picture函数),查找起始帧标志位,并插入Huffman数据表。
3)通知所有线程有一帧数据已经处理为JPEG格式。
4)解锁全局变量的图像缓冲区。
3.3 视频数据的传输
为了实现能将采集到的视频数据通过网络进行传输,本系统使用了在Linux下TCP协议的Socket编程[7]。Socket接口是一个在不同进程间的通讯端点,Socket在Linux系统中被看做是一个文件,当客户端和服务器端的Socket被创建时,服务器端会调用accept()函数,并以阻塞方式等待响应客户端的连接请求,连接成功后,双方就可以进行正常的数据通信,通讯结束后,释放Socket结构。其编程结构如图4所示。
当有多个客户端提出请求时还需要建立多线程并发服务器[8],当客户端提出连接请求时,会建立一个新的线程,这样每一个客户端都会有一个独立的线程,实现多个线程数据的并发。线程可以对进程的内存空间和资源进行访问,并与同一进程中的其他线程共享数据区。因此,并发服务器线程的增加并不会让服务器进程随着客户端的增加而线性增长,这样就降低了服务器进程压力,提高了其性能。代码如下:
pthread_t client;struct addrinfo*aip,*aip2;
struct addrinfo hints;
struct sockaddr_storageclient_a-
ddr;
服务器监听IP
socklen_taddr_len=sizeof(structsockaddr_storage);
阻塞方式等待客户端连接
pcfd->fd = accept(pcontext->sd, (struct sockaddr *)&client_addr, &addr_len);
新客户端申请结构
while(!pglobal->stop) cfd *pcfd = malloc(sizeof(cfd));
客户端线程创建
if(pthread_create(&client, NULL, &client_thread, pcfd) != 0)
pthread_detach(client);
图4 Linux下TCP协议的Socket编程结构
4 系统运行与实现
由于视频传输数据量大、实时要求高,完成视频传输,链路的数据吞吐量必须大于视频数据流量。测试结果表明,本系统能够达到稳定的传输效果,图像清晰,视频无卡顿现象,并支持多个客户端同时浏览页面,最终实现了视频数据采集传输。系统运行效果如图5所示。在移动设备和网络飞速发展的今天,将本系统网络进行拓展,手机等移动设备也可作为客户端,随时随地的进行远程监控,这样也为以后的智能化控制提供了基础。本设计主要有以下几个特点:
1)实现了多方式无线局域网视频数据采集传输,可以利用各种无线移动设备对视频数据实时监控,例如手机、平板电脑等。
2)应用范围广、效果好,稳定性高。
3)硬件结构简单,成本低,体积小,可运用于飞机航拍等一些特殊环境场所。
图5 系统运行效果图
参考文献
[1] SamsungElectronics S3C24 10X 32- BIT RISC MIC R O P R E SSO R SRSMANA L . Revision 1.2.Pu blication Number:21.2-S3-C 24 10-052003 ,May 2005.
[2] 韩超,王可人.基于DM9000的嵌入式系统的网络接口的设计与实现 [J].工业控制计算机 ,2005,20(4):17-18.
[3] BATCHAEVSS.Computer assisted monitoring systems use of computer network sandinter nettechnologies[J].BiomediealEngineering,2005,9(4):161-166.
[4] GENESIS MICROCHIP. gm6015 Preliminary Data Sheet[M]. California US: Genesis Microchip Company, 2001:33-34.
[5] 李珊珊,王绪国.基于V4L2的远程视频采集系统设计与实现[D].武汉:武汉理工大学,2011.
[6] JTC 1/SC29/WG 1.ISO/IEC CD29199-2: 2010 JPEG XR image coding Specification[S]. ISO/IEC:2010.
[7] GUHA S,FRANCIS P.Characterization and Measurement of TCP Traversal Through NATs and FireWalls[C] //Proc of Internet Measurement Conference,2005-10.
[8] GYU SANG CHOI,J inHaKim,Deniz Ersoz,SO.A multithreaded P IPEL lNED Web server architecture for SMP/SoC machines[C].Proceedings of the 14 th internationaleonference onWorldWideWeb,ACM Press 2005:730-739.
memset(&vd->cap,0,sizeof(struct v4l2_capability));
ret=ioctl(vd>fd,VIDIOC_QUERYCAP, &vd->cap);
获取摄像头基本参数
vd->fmt.fmt.pix.width =vd>width;
捕获视频宽度像素
vd->fmt.fmt.pix.height=vd>height;
捕获视频高度像素
Struct v4l2_streamparm*setfps;
etfps=(struct v4l2_streamparm*)
calloc(1,sizeof(structv4l2_stre-amparm));
设置视频帧频率
memset(&vd->rb, 0, sizeof(struct v4l2_requestbuffers));
vd->rb.count = NB_BUFFER;
设置视频帧缓冲区个数
for (i = 0; i < NB_BUFFER; i++) {memset(&vd->buf,0,sizeof(struc-t v4l2_buffer));
将帧缓冲区数据映射到内存
int uvcGrab(struct vdIn *vd);
获取一帧视频信号的图像。
视频数据采集具体流程如图3所示。
图3 视频采集流程图
3.2 格式转换和MJPEG编码压缩
由于不同的摄像头都有不同的输出格式,所以进行合适的格式转换是非常有必要的,由摄像头所采集到的原始数据并不适合用于传输,为了减少传输视频数据的码流大小还需要对图像进行压缩。本系统所用的摄像头输出YUV 4:2:2格式的图像数据,将图像数据转换为RGB格式,再通过调用Linux下的Libjpeg库对图像进行压缩。
格式转换以及压缩处理过程和基本代码函数名如下:
1)上锁全局变量的图像缓冲区(pthread_mutex_Lock)。
2)判断图像颜色编码格式,如果是YUV格式的颜色编码(以YUV4:2:2为例,调用compress_yuyv_o_jpeg函数)将一行YUV转换RGB,并将一行RGB压缩成JPEG格式[6],行加一,判断图像是否压缩到最后一行。如果是MJPEG编码格式输出的图像(调用int memcpy_picture函数),查找起始帧标志位,并插入Huffman数据表。
3)通知所有线程有一帧数据已经处理为JPEG格式。
4)解锁全局变量的图像缓冲区。
3.3 视频数据的传输
为了实现能将采集到的视频数据通过网络进行传输,本系统使用了在Linux下TCP协议的Socket编程[7]。Socket接口是一个在不同进程间的通讯端点,Socket在Linux系统中被看做是一个文件,当客户端和服务器端的Socket被创建时,服务器端会调用accept()函数,并以阻塞方式等待响应客户端的连接请求,连接成功后,双方就可以进行正常的数据通信,通讯结束后,释放Socket结构。其编程结构如图4所示。
当有多个客户端提出请求时还需要建立多线程并发服务器[8],当客户端提出连接请求时,会建立一个新的线程,这样每一个客户端都会有一个独立的线程,实现多个线程数据的并发。线程可以对进程的内存空间和资源进行访问,并与同一进程中的其他线程共享数据区。因此,并发服务器线程的增加并不会让服务器进程随着客户端的增加而线性增长,这样就降低了服务器进程压力,提高了其性能。代码如下:
pthread_t client;struct addrinfo*aip,*aip2;
struct addrinfo hints;
struct sockaddr_storageclient_a-
ddr;
服务器监听IP
socklen_taddr_len=sizeof(structsockaddr_storage);
阻塞方式等待客户端连接
pcfd->fd = accept(pcontext->sd, (struct sockaddr *)&client_addr, &addr_len);
新客户端申请结构
while(!pglobal->stop) cfd *pcfd = malloc(sizeof(cfd));
客户端线程创建
if(pthread_create(&client, NULL, &client_thread, pcfd) != 0)
pthread_detach(client);
图4 Linux下TCP协议的Socket编程结构
4 系统运行与实现
由于视频传输数据量大、实时要求高,完成视频传输,链路的数据吞吐量必须大于视频数据流量。测试结果表明,本系统能够达到稳定的传输效果,图像清晰,视频无卡顿现象,并支持多个客户端同时浏览页面,最终实现了视频数据采集传输。系统运行效果如图5所示。在移动设备和网络飞速发展的今天,将本系统网络进行拓展,手机等移动设备也可作为客户端,随时随地的进行远程监控,这样也为以后的智能化控制提供了基础。本设计主要有以下几个特点:
1)实现了多方式无线局域网视频数据采集传输,可以利用各种无线移动设备对视频数据实时监控,例如手机、平板电脑等。
2)应用范围广、效果好,稳定性高。
3)硬件结构简单,成本低,体积小,可运用于飞机航拍等一些特殊环境场所。
图5 系统运行效果图
参考文献
[1] SamsungElectronics S3C24 10X 32- BIT RISC MIC R O P R E SSO R SRSMANA L . Revision 1.2.Pu blication Number:21.2-S3-C 24 10-052003 ,May 2005.
[2] 韩超,王可人.基于DM9000的嵌入式系统的网络接口的设计与实现 [J].工业控制计算机 ,2005,20(4):17-18.
[3] BATCHAEVSS.Computer assisted monitoring systems use of computer network sandinter nettechnologies[J].BiomediealEngineering,2005,9(4):161-166.
[4] GENESIS MICROCHIP. gm6015 Preliminary Data Sheet[M]. California US: Genesis Microchip Company, 2001:33-34.
[5] 李珊珊,王绪国.基于V4L2的远程视频采集系统设计与实现[D].武汉:武汉理工大学,2011.
[6] JTC 1/SC29/WG 1.ISO/IEC CD29199-2: 2010 JPEG XR image coding Specification[S]. ISO/IEC:2010.
[7] GUHA S,FRANCIS P.Characterization and Measurement of TCP Traversal Through NATs and FireWalls[C] //Proc of Internet Measurement Conference,2005-10.
[8] GYU SANG CHOI,J inHaKim,Deniz Ersoz,SO.A multithreaded P IPEL lNED Web server architecture for SMP/SoC machines[C].Proceedings of the 14 th internationaleonference onWorldWideWeb,ACM Press 2005:730-739.
memset(&vd->cap,0,sizeof(struct v4l2_capability));
ret=ioctl(vd>fd,VIDIOC_QUERYCAP, &vd->cap);
获取摄像头基本参数
vd->fmt.fmt.pix.width =vd>width;
捕获视频宽度像素
vd->fmt.fmt.pix.height=vd>height;
捕获视频高度像素
Struct v4l2_streamparm*setfps;
etfps=(struct v4l2_streamparm*)
calloc(1,sizeof(structv4l2_stre-amparm));
设置视频帧频率
memset(&vd->rb, 0, sizeof(struct v4l2_requestbuffers));
vd->rb.count = NB_BUFFER;
设置视频帧缓冲区个数
for (i = 0; i < NB_BUFFER; i++) {memset(&vd->buf,0,sizeof(struc-t v4l2_buffer));
将帧缓冲区数据映射到内存
int uvcGrab(struct vdIn *vd);
获取一帧视频信号的图像。
视频数据采集具体流程如图3所示。
图3 视频采集流程图
3.2 格式转换和MJPEG编码压缩
由于不同的摄像头都有不同的输出格式,所以进行合适的格式转换是非常有必要的,由摄像头所采集到的原始数据并不适合用于传输,为了减少传输视频数据的码流大小还需要对图像进行压缩。本系统所用的摄像头输出YUV 4:2:2格式的图像数据,将图像数据转换为RGB格式,再通过调用Linux下的Libjpeg库对图像进行压缩。
格式转换以及压缩处理过程和基本代码函数名如下:
1)上锁全局变量的图像缓冲区(pthread_mutex_Lock)。
2)判断图像颜色编码格式,如果是YUV格式的颜色编码(以YUV4:2:2为例,调用compress_yuyv_o_jpeg函数)将一行YUV转换RGB,并将一行RGB压缩成JPEG格式[6],行加一,判断图像是否压缩到最后一行。如果是MJPEG编码格式输出的图像(调用int memcpy_picture函数),查找起始帧标志位,并插入Huffman数据表。
3)通知所有线程有一帧数据已经处理为JPEG格式。
4)解锁全局变量的图像缓冲区。
3.3 视频数据的传输
为了实现能将采集到的视频数据通过网络进行传输,本系统使用了在Linux下TCP协议的Socket编程[7]。Socket接口是一个在不同进程间的通讯端点,Socket在Linux系统中被看做是一个文件,当客户端和服务器端的Socket被创建时,服务器端会调用accept()函数,并以阻塞方式等待响应客户端的连接请求,连接成功后,双方就可以进行正常的数据通信,通讯结束后,释放Socket结构。其编程结构如图4所示。
当有多个客户端提出请求时还需要建立多线程并发服务器[8],当客户端提出连接请求时,会建立一个新的线程,这样每一个客户端都会有一个独立的线程,实现多个线程数据的并发。线程可以对进程的内存空间和资源进行访问,并与同一进程中的其他线程共享数据区。因此,并发服务器线程的增加并不会让服务器进程随着客户端的增加而线性增长,这样就降低了服务器进程压力,提高了其性能。代码如下:
pthread_t client;struct addrinfo*aip,*aip2;
struct addrinfo hints;
struct sockaddr_storageclient_a-
ddr;
服务器监听IP
socklen_taddr_len=sizeof(structsockaddr_storage);
阻塞方式等待客户端连接
pcfd->fd = accept(pcontext->sd, (struct sockaddr *)&client_addr, &addr_len);
新客户端申请结构
while(!pglobal->stop) cfd *pcfd = malloc(sizeof(cfd));
客户端线程创建
if(pthread_create(&client, NULL, &client_thread, pcfd) != 0)
pthread_detach(client);
图4 Linux下TCP协议的Socket编程结构
4 系统运行与实现
由于视频传输数据量大、实时要求高,完成视频传输,链路的数据吞吐量必须大于视频数据流量。测试结果表明,本系统能够达到稳定的传输效果,图像清晰,视频无卡顿现象,并支持多个客户端同时浏览页面,最终实现了视频数据采集传输。系统运行效果如图5所示。在移动设备和网络飞速发展的今天,将本系统网络进行拓展,手机等移动设备也可作为客户端,随时随地的进行远程监控,这样也为以后的智能化控制提供了基础。本设计主要有以下几个特点:
1)实现了多方式无线局域网视频数据采集传输,可以利用各种无线移动设备对视频数据实时监控,例如手机、平板电脑等。
2)应用范围广、效果好,稳定性高。
3)硬件结构简单,成本低,体积小,可运用于飞机航拍等一些特殊环境场所。
图5 系统运行效果图
参考文献
[1] SamsungElectronics S3C24 10X 32- BIT RISC MIC R O P R E SSO R SRSMANA L . Revision 1.2.Pu blication Number:21.2-S3-C 24 10-052003 ,May 2005.
[2] 韩超,王可人.基于DM9000的嵌入式系统的网络接口的设计与实现 [J].工业控制计算机 ,2005,20(4):17-18.
[3] BATCHAEVSS.Computer assisted monitoring systems use of computer network sandinter nettechnologies[J].BiomediealEngineering,2005,9(4):161-166.
[4] GENESIS MICROCHIP. gm6015 Preliminary Data Sheet[M]. California US: Genesis Microchip Company, 2001:33-34.
[5] 李珊珊,王绪国.基于V4L2的远程视频采集系统设计与实现[D].武汉:武汉理工大学,2011.
[6] JTC 1/SC29/WG 1.ISO/IEC CD29199-2: 2010 JPEG XR image coding Specification[S]. ISO/IEC:2010.
[7] GUHA S,FRANCIS P.Characterization and Measurement of TCP Traversal Through NATs and FireWalls[C] //Proc of Internet Measurement Conference,2005-10.
[8] GYU SANG CHOI,J inHaKim,Deniz Ersoz,SO.A multithreaded P IPEL lNED Web server architecture for SMP/SoC machines[C].Proceedings of the 14 th internationaleonference onWorldWideWeb,ACM Press 2005:730-739.