新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于ARM Linux的3G无线车载视频监控系统

基于ARM Linux的3G无线车载视频监控系统

作者:时间:2013-03-05来源:网络收藏

主要过程如下:
(1)打开视频设备。调用函数int open(constchar * pathname,int flags),若返回值为-1,表示打开失败,否则,表示所打开设备的文件描述符。
(2)读取设备信息。Ioctl(cam_fp,VIDIOC_QUERYCAP,cap)函数来取得设备文件的属性参数并存储存于cap结构中,其中cam_fp指的是打开的视频设备文件描述符。
(3)选择视频的输入方式。通过ioetl(cam_fp,VIDIOC_S_INPUT,chan)函数设置视频设备的输入方式,其中chan的数据结构类型是V4L2 _input,用来指定视频的输入方式。
(4)设置视频帧的格式。通过ioctl(cam_fp,VIDIOC_S_FMT,fmt)函数设置视频的帧格式,其中fmt的数据结构类型是V4L2_format,用来指定视频的宽度、高度、像素大小等。
(5)读取视频数据。通过read(cam_fp,g_yuv,YUV_SIZE)函数,把摄像头一帧的数据存放到g_yuv中,其中YUV_SIZE指的是每帧数据的大小。
(6)关闭视频设备。通过close(cam_fp)函数来实现视频设备的关闭。根据流程图可对其进行相应操作。当摄像头通过USB接口连接后,程序中调用V4L API对设备文件的读操作read(),即可完成视频数据采集到内存中,视频数据可用图4形式保存,也可压缩后封装进数据包。本文是先将采集数据进行压缩后再封装进数据包,并传输到监控PC进行处理。
3.2.3 视频压缩模块设计
因视频采集模块采集的视频数据信息量非常大,为了提高数据传输速度、降低网络数据流量、保证监控的实时性,有必要对车载摄像头采集的数据压缩编码。文中采用硬编码方式(硬编码具有不占用CPU资源,运算速度快等优点,从而满足视频数据实时性的要求)将摄像头采集的图像系列压缩编码成流媒体。具体编码的过程如图5所示。

本文引用地址:http://www.eepw.com.cn/article/148087.htm

e.JPG


(1)创建编码结构。调用SsbSipH264Encodehlit(width,height,frame_rate,bitrate,gop_num)函数实现,其中width表示图像的宽度,height表示图像的高度,frame_rate表示帧频,bitrate表示比特率或码率,gop_num表示两个相离关键帧之间最多包含多少个帧(B或P帧)。
(2)初始化H.264编码结构,调用SsbSipH264Encode Exe(handle)函数。
(3) 获取视频输入地址,调用SsbSipH264EncodeGetInBuf(handle,0)函数来实现,该函数返回视频输入的首地址,存放在p_inbuf中。
(4)输入视频数据,调用memcpy(p_inbuf,yuv_bur,frame_size)函数实现,p_inbuf存放需要编码的数据,yuv_buf存放原始视频数据,frame_size表示数据的大小。
(5)编码视频数据,对p_inbuf内容进行H.264编码,调用SsbSipH264EncodeExe(handle)函数实现。
(6) 输出已编码的数据,调用 SsbSipH264EncodeGetOutBuf(handle,size),该函数返回已编码图像的首地址,size表示已编码图像的大小。
(7)关闭硬编码设备,调用SsbsipH264Encode DeInit(handle)函数实现的。
3.2.4 嵌入式服务器boa移植
Linux支持boa、HTTPD、THTTPD等几种Web服务器,其中boa Web服务器更适合于嵌入式系统,因为它是一个单任务、支持CGI(Common Gateway Interface,通用网关接口)功能的Web服务器,只能依次完成用户的请求,而不会fork出新的进程来处理并发出连接请求,可执行代码只有约60K。
首先进入boa源码目录的src子目录,执行命令./con-figure生成Maketile文件,然后修改Makefile文件找到CC=gcc,将其改成CC=arm-linux-gcc,再将CPP=gcc-E改成CPP=arm-linux-gcc-E,并保存退出。然后运行make进行编译,得到的可执行程序为boa,之后执行命令arm-linux-strip boa,将调试信息去掉,得到的最终程序。第二步完成boa的配置,使其能够支持CGI程序的执行。Boa需要在/etc目录下建立一个boa目录,里面放入boa的主要配置文件boa.conf,主要文件的含义有:AccessLog/var/log/boa/access_log访问日志文件。如果没有以/开始,则表示从服务器的根路径开始;VerboseCGILogs是否记录CGI运行信息,如果没有注释掉,则记录,注释掉则不记录;Document Root/var/wwwHTML文档的主目录,如果没有以/开始,则表示从服务器的根路径开始;DirectoryMaker/usr/lib/boa/boa_indexer当HTML目录没有索引文件时,用户只指明访问目录时,boa会调用该程序生索引文件给用户,因为该过程比较慢最好不执行,可以注释掉;Scri ptAlia/cgi-bin//var/www/cgi-bin/指明CGI脚本的虚拟路径对应的实际路径。一般所有的CGI脚本都要放在实际路径里,用户访问执行时输入站点+虚拟路径+CGI脚本名。对boa.conf进行修改的必须要保证是使其他的辅助文件和设置必须和boa.conf里的配置相符,不然boa就不能正常工作。另外还需要创建日志文件所在目录/var/log/boa,创建HTML文档的主目录/var/www,将mime.types文件拷贝到/etc目录,创建CGI肢本所在目录/var/www/cgi-bin/。
3.2.5 CGI程序的设计
CGI提供了一个Web服务器的外部程序通道,运行在服务器上,由浏览器输入触发,是Web服务器和系统中其他程序的连接通道。CGI程序就是符合这种接口的程序。服务器接收到用户的请求,并将数据送给CGI程序。CGI程序接收到数据后,启动编写好的应用程序,并按照用户提供的数据执行。应用程序执行完成后,返回执行结果,并通过Web服务器传送给用户浏览器显不。
CGI模块程序的设计主要包括如下几部分:Web服务器的配置、HTML页面的编写、CGI脚本实现。
(1)Web服务器的配置
嵌入式Web服务器采用boa,其配置是以文本的形式提供,放在文件系统中的/etc/httpd/conf/目录下面,其主要配置在以上的boa服务器移植中讲述过了。
(2)HTML页面的编写
因为系统的设计的主要方向是能够通过USB摄像头进行实时监控。所以为了实现简单化,抛开一些不必要复杂的选择项。主要的HTML页面有登录界面、注册界面和监控界面。这些HTML放在嵌入式文件系统的/var/www目录下。
(3)CGI脚本实现
实现动态Web页面的第二步是用C编写CGI程序,CGI程序分为以下几部分:根据POST方法或GET方法从提交的表单中接收数据;URL编码的解码;用printf()函数来产生HTML源代码,并将经过解码后的数据正确地返回给浏览器。
3.2.6 远程视频数据接收模块设计
目前流行的浏览器有IE、FireFox、Chrome等,对于普通的文本及HTML文件支持的GIF、JPEG等格式的图片都可以轻松的显示,但对于实时视频数据,这些普通浏览器无法正常的显示。所以实时视频数据接收模块主要完成的工作是视频数据的接收、报文的解封装、发送RTcP反馈信息、H.264视频解码和Web浏览器的显示。
本系统采用ActiveX控件技术,嵌入在Web页面中,来完成视频数据的接收、协议、解码和最后的显示工作。最重要的一点,系统采用双缓冲技术,来满足视频的解码速度的问题,实现实时播放。具体流程图如图6所示。

f.JPG



4 系统的测试与结论
本文设计了一种基于ARM S3C2440的嵌入式系统,首先通过USB采集中星微摄像头作为服务器,实现利用V4L2技术对USB摄像头进行数据采集,并将数据送入H.264编码模块进行数据的压缩,压缩后的数据经过视频服务器封装打包,最后通过嵌入式Web服务器与远程客户端进行交互。本系统在实际的运营网络中进行了测试,目标定位信息接收速率为1次/s,动态定位精度小于等于10 m;能实现动态视频传输,且视频传输流畅,图像最大分辨率可达VGA(640×480像素),视频传输的质量优于基于2.5G网络的车辆监控系统(图像最大的分辨率为320×240像素,且基本上只能传输静态图像)。

linux相关文章:linux教程


摄像头相关文章:摄像头原理

上一页 1 2 3 下一页

关键词: GPS 3G 视频监控 H.264 RTP

评论


相关推荐

技术专区

关闭