基于Mjpegstreamer的远程视频监控系统.docx
- 文档编号:30730089
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:58
- 大小:749.34KB
基于Mjpegstreamer的远程视频监控系统.docx
《基于Mjpegstreamer的远程视频监控系统.docx》由会员分享,可在线阅读,更多相关《基于Mjpegstreamer的远程视频监控系统.docx(58页珍藏版)》请在冰豆网上搜索。
基于Mjpegstreamer的远程视频监控系统
2012届毕业设计说明书
基于Mjpg-streamer的远程视频监控系统
学院:
电气与信息工程学院
学生姓名:
陈金辉
指导教师:
职称讲师
专业:
自动化
班级:
0801班
完成时间:
2012年5月
摘要
作为安防系统的重要组成部分,视频监控系统随着嵌入式技术、多媒体技术、计算机网络技术的快速发展也在不断地更新与发展。
目前新兴的基于嵌入式技术的网络视频监控系统与传统的视频监控系统相比具有体积小、成本低、稳定性高、实时性好等优点,具有广阔的发展前景。
本文设计并成功实现了一个基于嵌入式处理器ARM9,Linux操作系统的网络视频监控系统。
首先通过两种构架方案的对比,确定了本系统采用浏览器/服务器的构架方案。
并在此方案下给出了详细的系统拓扑结构图和总体程序流程图。
详述了Linux内核的移植和根文件系统制作等平台搭建工作。
重点讨论了在嵌入式Linux操作系统下利用linux提供的V4L2API实现对USB视频设备的视频数据采集;介绍了YUYV与RGB视频格式,MJPEG与JPEG文件格式,使用Libjpeg进行JPEG压缩;在Linux下基于TCP/IP协议的Socket编程,实现了视频数据的网络发送。
最后着重论述了嵌入式WEB服务器的设计,HTTP的请求响应分析。
并对本系统进行了测试。
本系统采用模块化设计方法,使得设计更加简洁、高效,具有良好的扩展性和易用性,有利于系统升级。
关键词:
ARM9;Linux;视频监控
ABSTRACT
Asanimportantpartofsecurityanddefensesystems,videosurveillancesystemisdevelopingandupdatingcontinuouslywiththetechnologicalinnovationofembeddedsystem,multimediaandcomputernetwork.Thecurrentembedded—systembasednetworkvideosurveillancesystemhasagreatprospectduetoitsbetterportability,lowercost,higherstabilityandbetterreal-timefeature,comparedtothetraditionalvideosurveillancesystem.
ThispapersuccessfullydesignedanembeddednetworkvideosurveillancesystembasedonembeddedprocessorARM9andLinuxoperatingsystems.
Firstofall,Throughcomparisonofthetwoframeworkscheme,browser/serverarchitectureschemeistheeventualchoicescheme.Underthisscheme,thesystemtopologymapandoverallsoftwareflowchartweregivenindetail.Then,thebuiltworkofthedevelopmentplatformsuchastheLinuxkerneltransplantationandrootfilesystemproductionarealsodescribedindetail.FocusedontheuseoftheV4L2APIoflinuxinanembeddedLinuxoperatingsystemtocapturethevideodataoutputedbyUSBvideodevices;TheYUYVRGBvideoformat,MJPEGandJPEGfileformats,andJPEGcompressionwithLibjpeg;theLinuxSocketProgrammingbasedonTCP/IPprotocol,thevideodatasentoverthenetwork.FinallyfocusesonthedesignoftheembeddedWebserver,theHTTPrequestandresponseanalysis.Andthetestresultofthesystem.
Themodulardesignapproachisusedinthesystemwhichmakesthedesignmorecompactable,efficient,andeasetoupgrade.
KeywordsARM9;Linux;Videosurveillance
目录
1绪论1
1.1视频监控发展现状和趋势1
1.2课题研究的意义2
2方案选择与设计3
2.1C/S方案3
2.2B/S方案3
2.3系统总体方案4
3嵌入式Linux开发平台的搭建6
3.1FL2440开发板平台介绍6
3.1.1S3C2440简介6
3.1.2板载资源介绍6
3.2嵌入式系统的构建6
3.2.1交叉编译工具链、NFS环境的搭建6
3.2.2linux内核的移植7
3.2.3根文件系统9
4视频采集13
4.1V4L2简介13
4.2视频采集的实现13
4.2.1视频采集流程13
4.2.2关键函数分析14
5格式转换与视频压缩19
5.1格式转换19
5.1.1RGB与YUV格式简介19
5.2JPEG压缩20
5.2.1JPEG与MJPEG文件格式简介20
5.2.2JPEG库简介20
5.2.3JPEG压缩的实现21
6视频传输与网络视频服务器25
6.1视频传输25
6.1.1TCP/IP协议簇基础25
6.1.2LinuxSocket编程简介25
6.2网络服务器26
6.2.1多线程编程简介26
6.2.2HTTP简介27
6.2.3并发服务器线程实现28
6.2.4HTTP请求响应线程实现30
7调试方法与测试结果33
7.1调试方法33
7.2测试结果33
8总结与展望35
8.1总结35
8.2展望35
参考文献37
致谢38
附录A主函数代码39
附录B显示主页的HTML代码44
附录C实物图45
1绪论
1.1视频监控发展现状和趋势
近三十年来,视频监控系统的发展十分迅速,总体来看,视频监控系统的发展大致可分为三代。
第一代是模拟监控时代。
模拟监控技术发展较早,在20世纪90年代以前,系统以模拟设备为主。
模拟视频监控系统一般由监控前端、传输设备、控制设备以及显示设备组成。
监控前端一般为模拟摄像机、云台、声光电报警设备和雨刷等。
传输设备一般为传输视频的同轴电缆,远距离传输可采用模拟光纤或者利用光端机进行传输。
控制设备主要是视频切换矩阵,采用键盘进行切换和控制,将需要监控的图像在指定的显示设备进行显示。
显示设备主要包括图像的监视器、报警指示设备等。
这类系统主要应用于小范围内的监控,如大楼监控等。
监控图像一般只能在控制中心查看。
有线模拟视频监控无法联网,只能以点对点的方式监视现场,并且布线工程量极大。
第二代是半数字时代。
20世纪90年代视频监控进入数字化阶段,随着计算机和多媒体处理技术的发展,人们利用多媒体控制主机或硬盘录像主机(DVR)进行数字化处理与存贮,将原来的磁带存储方式转变成数字存储录像,进行模拟数字转换并录像和显示,集合了录像机、画面分割器等功能,跨出数字监控的第一步,基于PC的多媒体监控系统由此产生。
而该系统视频前端(如CCD等视频信号的采集、压缩、通讯)较为复杂,稳定性、可靠性不高,功耗高,结构复杂,价格高昂。
PC机也需专人管理,操作较为繁琐。
图像传输仅局限在局域网内传输,传输距离明显受限,并且模拟视频信号的衰减很严重,传输距离不能超过1000m,否则必须采用光纤传输,图像质量受环境干扰也较大。
第三代是全数字时代。
从2004年开始,随着网络带宽的提高和成本的降低、硬盘容量的加大和中心存储成本的降低,以及各种实用视频处理技术的出现,视频监控步入了全数字化的网络时代。
近两年随着远程监控系统被越来越多的应用于各个领域,对视频监控系统的要求也越来越高:
操作简单、实时可靠、多功能、数字化、经济实用的视频监控系统的开发和设计正越来越多地受到人们的瞩目。
基于嵌入式技术的网络化视频监控系统应运而生。
目前市场上的数字视频监控系统主要有三种,一种是基于PC机的远程视频监控系统,现场放置插有视频卡的PC机,视频的压缩与解压缩由视频卡来负责完成。
其优点在于能实现在网上互联互通及授权客户直接访问,便于构建系统及方便联网,缺点是实用性较差,系统稳定性差,费用高,而且现场不能脱离PC机。
另一种是通过在现场设置视频网络编码器,将模拟视频编码后上网传输,并在监控端设置的对应解码器上将网上传输的数字视频信号解码后进行监控。
其优点在于现场不需要PC机支持,系统稳定性提高。
缺点是只能实现一对一传输,较难实现授权客户直接访问和联网。
随着技术的进步,市场上出现了一种新型的网络化远程视频监控,即基于嵌入式视频服务器技术的远程网络视频监控。
现场采用的网络监控产品主要包括:
网络摄像机、网络服务器、网络视频接入器等。
网络视频服务器解决了视频流在网络上的传输问题,从图像采集开始进行数字化处理、传输,这样使得传输线路的选择更加多样。
1.2课题研究的意义
视频监控系统是重要场所诸如电力、邮电、银行、交通、商场等需要信息广泛交流企业的生产与管理的必备系统。
比如,对于银行系统而言,通过监控系统,可以对一些突发事件进行回放,很容易找到事件的相关责任人;在制造企业中,可以通过监控系统实现无人生产,对机器进行远程维修等。
随着国民经济的发展,视频监控系统的应用已经越来越广泛。
目前视频监控系统主要在以下领域中使用:
●对机要部门的监视、控制和报警,如档案室、文件室、金库、博物馆等
●工厂、市场等的监视,如工厂生产过程、市场、营业厅、货场等的监视
●对交通运输的监视,如公共交通、铁路车站、铁路调度等的监视
●用于安全报警,如防盗、防火等的报警
●家庭用户,随着人民生活水平的提高以及计算机的家庭普及率提高,家庭小型监控系统的需求量也变得越来越大
在计算机未被广泛应用以及数字视频等理论研究尚未成熟以前,传统模拟监控系统占据了监控领域的主要位置。
传统的模拟监控,通常是利用录像机将镜头的画面录下来以备查,而录像机录下来的图像,一是清晰度不够,二是查询麻烦,而且录像带的保存也是问题,尽管有着种种不足,但因为前几年的技术限制,这种模式的监控系统还是被普遍使用。
随着网络、通信和数字信息技术的不断进步,监控系统的组成模式也在快速变化和发展中,当前网络技术与嵌入式系统技术的结合催生了全新的基于嵌入式WEB的监控系统。
它向人们展示的是现代高科技的结晶,是网络技术与嵌入式系统技术的完美结合。
基于嵌入式WEB监控系统由于把视频处理和WEB功能集成到一个体积很小的设备内,可以直接连入以太网,达到即插即看,省掉很多复杂的电缆,安装方便,用户无需专用软件。
这些优点将使得基于嵌入式视频监控系统获得更广泛的应用。
广阔的市场前景伴随着各项新技术的日益发展与成熟,这使得嵌入式视频监控系统的研究与开发具有重大的现实意义。
2方案选择与设计
本章介绍了视频监控的两种构架方案:
C/S方案和B/S方案。
通过对两种构架方案的优缺点,以及各自的实现方案,开发难度等方面的对比,最终本设计选用了B/S方案。
2.1C/S方案
C/S方案即Client/Server方案,客户端是一个应用程序,服务器在目标板上运行。
在Windows平台微软提供了两种方案,DirecShow和VideoForWindows(简称VFW)。
可以实现持多媒体信息的采集、压缩、解压和回放存。
VFW已经过时,一般都采用DirecShow。
在Linux平台上也需要QT设计GUI,使用SDL实现播放。
二者客户端程序都需要专门开发,而且要使用面向对象语言开发,一般采用C++或者C#。
总之,开发难度较大,PC机还需要安装专门软件,运行维护难度大。
此外,要建立在小范围里的网络环境,局域网之间还要再通过专门服务器提供连接和数据交换服务。
因此本设计舍弃本方案。
当然C/S方案也有其优势,其优势在于可以很好的利用客户端软件实现录像回放等视频管理。
2.2B/S方案
B/S方案即Browser/Server方案,客户端为浏览器,服务器在开发板上运行。
它是随着Internet技术的兴起,是对C/S结构的改进。
在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现。
B/S结构结合浏览器的多种Script语言(VBScript、JavaScript等)和ActiveX技术,用通用浏览器就实现了原来需要复杂专用软件才能实现的强大功能,并节约了开发成本,是一种全新的软件系统构造技术。
建立在广域网之上的,不必是专门的网络硬件环境。
因此B/S相比于C/S有更强的适应范围。
B/S结构的优点总结如下:
●具有分布性特点,可以随时随地进行查询、浏览等业务处理
●业务扩展简单方便,通过增加网页即可增加服务器功能
●维护简单方便,只需要改变网页,即可实现所有用户的同步更新。
●开发简单,共享性强
如果不需要很完善的视频管理功能,B/S构架还是有着巨大的优势,本设计即采用B/S构架方案。
B/S方案已经有很多非常方便的实现方案。
如在开发板上运行servfox视频服务器,在PC机上运行spcaview来显示视频,但是servfox采用的是V4L,它与V4L2还是有很多地方不兼容。
本设计以开源项目Mjpg‐streamer为基础。
它使用V4L2的接口,能实现视频服务器的功能。
可以将视频通过网络传输到浏览器,VLC播放器,Windows的移动设备或者其他拥有浏览器的移动设备。
2.3系统总体方案
(1)系统拓扑结构
系统拓扑结构如图1。
系统采用B/S架构。
视频由USB摄像头输入,支持市面上常见的输出格式为YUYV和MJPEG的摄像头。
视频数据通过USB传输到开发板。
客户端采用浏览器来浏览视频。
用户在浏览器地址栏输入开发板IP地址和端口,通过用户名和密码验证后就可以在浏览器页面上看到监控的视频画面。
而且采用并发服务器从而实现了多客户端也就是可以支持多个浏览器同时显示。
图1系统拓扑结构图
(2)系统程序流程
系统程序流程如图2。
首先是初始化,包括输入初始化和输出初始化。
输入初始化,主要是调用V4L2对摄像头初始化,包括捕获视频尺寸等设置。
输出初始化,主要是根据启动参数配置输出,比如主页文件的目录,使用的端口号等。
接下来运行输入和输出函数,二者都会创建线程,并且会将线程从进程中独立出来。
输入线程会创建抓图线程cam_thread。
这个线程就是输入线程的主体,图2中标识了它是一个循环,只要用户没有按下Ctrl+C循环就会永远继续下去,图2中所有的循环体也都是这样。
抓图函数uvcGrab以阻塞方式等待图像数据,当有一帧数据到达后先处理为JPEG文件,对于YUYV格式的图像数据先要转换成RGB格式,再调用libpeg压缩为JPEG文件,对于MJPEG格式的输入需要插入Huffman数据表。
捕获并处理了一帧视频之后再通知所有等待数据的客户端线程。
输出线程分为两大部分:
并发服务器线程和客户端处理线程。
并发服务器线程server_thread负责监听客户端请求,一旦有请求就创建一个新的客户端线程专门负责来自此客户端的HTTP请求。
这样服务器线程就可以一直监听客户端请求,本设计设置的最大可以处理的客户端数为10。
一个客户端线程client_thread只负责处理一个客户端响应,也就是只响应一个IP地址的请求。
进入client_thread之后,由于本系统开启了用户验证,所以客户端线程首先会验证客户端输入的用户名和密码,如果验证成功,将会发送HTTP响应头。
通过设置了一些响应头,使得服务器可以不断地发送JPEG数据给浏览器。
pthread_cond_wait以阻塞方式等待一帧数据的到来,一旦有JPEG数据就马上把数据从全局缓冲区中取出,发送给浏览器。
图2系统程序流程图
3嵌入式Linux开发平台的搭建
本章详述了嵌入式Linux开发平台的搭建,包括内核移植,根文件系统制作等。
主要是为本系统开发搭建软件平台,对于嵌入式项目开发这是尤为关键的一步,需要充分考虑到后续应用程序设计开发中需要使用的资源。
例如,本设计在内核版本的选择上,即充分考虑到对USB摄像头的驱动支持。
3.1FL2440开发板平台介绍
3.1.1S3C2440简介
本系统使用了三星公司的S3C2440A微处理器为主控芯片,其内核为ARM920T,最高时钟频率533MHz,采用298引脚的BGA封装。
该芯片具有MMU虚拟内存管理,独立的8K指令和8K数据缓存,支持DSP指令集,支持Cache,LCD控制器,NANDFlash控制器,3通道UART,4通道DMA,带脉宽调制的4路定时器,I/O端口,RTC(realtimeclock),8路10位ADC和触摸屏接口,IIC总线接口,IIS总线接口,USB主机,USB从机,SD座和多媒体卡接口,2路SPI和同步时钟发生器。
3.1.2板载资源介绍
开发板上本设计用到的硬件资源主要有:
●64M字节SDRAM
●4MNORFlash
●256M字节NANDFlash
●两个三线串口,一个TTL串口
●一个100M网口,采用DM9000CEP,带联接和传输指示灯
●四个USBHOST接口;一个USBDevice接口
3.2嵌入式系统的构建
3.2.1交叉编译工具链、NFS环境的搭建
(1)交叉编译工具链
嵌入式软件开发采用的编译是交叉编译,即在一个平台上编译生成能在另一个平台上执行的代码。
一般将进行交叉编译的主机称为宿主机,也就是普通的PC,而把程序实际运行的环境称为目标机,也就是嵌入式系统环境。
而交叉编译工具链是在编译程序时用到的一系列工具,例如编译器、汇编器、链接器等。
本文中使用的交叉编译工具链为arm-linux-gcc4.4.3。
arm-linux-gcc4.4.3的安装步骤为:
1)解压压缩包。
#tarxvzfarm-linux-gcc-version–C/
2)添加交叉编译工具链的搜索路径到系统PATH环境变量
#gedit/etc/profile
添加pathmunge/opt/FriendlyARM/toolschain/4.4.3/bin
3)应用更改
#source/etc/profile。
(2)NFS环境的搭建
网络文件系统NFS最早是SUN开发的一种文件系统。
NFS允许一个系统在网络上共享目录和文件。
通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统的文件。
Linux系统支持NFS,使用NFS的这种功能,就能很轻松地将宿主机上的文件挂载到嵌入式开发系统上去,这样不仅方便了嵌入式开发板对主机上文件地访问,而且极大地提高了嵌入式系统开发中应用程序的开发和调试效率。
主机配置步骤:
1)设置挂载目录
#gedit/etc/exports
添加“/*”即挂载主机根目录下所有文件。
2)#ntsysv–level3
3)按空格键选上netfs
开发板配置步骤:
1)修改启动文件,使开发板启动时就可以自动挂载网络文件系统。
#geditrootfs/etc/init.d/rcS
添加mount-n-onolock,rsize=1024,wsize=1024,timeo=15172.16.64.110:
//mnt。
其中172.16.64.110是主机的IP地址。
如果是在Windows中安装Linux虚拟机,则该地址为虚拟机中Linux的IP地址;如果主机是直接安装Linux操作系统,当然该地址就是主机的地址。
3.2.2linux内核的移植
(1)内核版本的选择
飞凌公司提供的最高内核版本为2.6.28,是比较早期的版本,对摄像头的支持也不完善。
本设计选用的内核版本为2.6.35.4。
(2)内核的移植
由于内核移植步骤很多,所以这里只列出主要的步骤。
1)yaff文件系统支持
关于yaff文件系统的介绍见3.2.3,此处只是说明怎样才能让内核支持yaff文件系统。
首先下载最新的yafffs文件系统,解压后给内核打补丁:
#cdyaffs2
#./patch-ker.shc../linux-2.6.35.4/
2)修改Makefile,主要是配置平台和编译器
#geditMakefile
将两行:
ARCH?
=$(SUBARCH)
CROSS_COMPILE?
=
修改为:
ARCH?
=arm
CROSS_COMPILE?
=/usr/local/arm/3.4.1/bin/arm-linux-
3)修改MTD分区。
就像Windows中硬盘会有几个分区一样,开发板的NandFlash也要分为几个区,主要是文件系统分区和内核分区。
修改结构体mtd_partitionsmdk_default_nand_part[],使其与Bootleader中的分区配置一致。
4)选择配置文件。
由于内核中没有FL2440开发板的配置文件,所以本设计选择与其相近的开发板的配置文件,再以此为基础根据系统需求作相应调整。
#makes3c2410_defconfig
执行成功后会在内核目录下生成配置文件.config
5)内核的配置,将所有USB摄像头驱动编译进内核。
#makemenuconfig
DeviceDrivers
Multimediasupport
[*]Videocaptureadapters--->
[*]V4LUSBdevices--->
将上面两个配置选项下的子选项全部选上,这样本系统基本上可以支持市面上所有的摄像头,而不仅仅局限于采用OV511,ZC03控制器的摄像头了。
6)修改网卡驱动。
内核支持的网卡驱动是DM9000AEP,开发板采用的是更具性价比的DM9000CEP。
只需简单修改即可。
步骤如下:
#geditdrivers/net/dm9000.c
修改dm9000_init_dm9000函数
找到iow(db,DM9000_GPR,0);/*EnablePHY*/
在后面添加:
delay(20);/*waitforPHYpower-onrea
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Mjpegstreamer 远程 视频 监控 系统