1、 分类号_ 密级_ UDC _ 学号_北京邮电大学毕业设计(论文)论文题目thesis Topic学生姓名学 号所 在 院 系专 业 班 级导师姓名职称完成日期2012年6月 日i嵌入式监控系统的设计与实现摘 要 本文分析了一种基于嵌入式Linux的网络视频监控系统。系统以嵌入式Linux为核心平台,通过嵌入式平台建立的基于TCP/IP协议的视频服务器,将usb摄像头采集来的图像数据压缩后,经过网络传输,完成对监控现场的网络视频监控任务。论文首先阐述了嵌入式网络视频的监控系统的发展状况,以及整体构建,然后介绍了嵌入式Linux操作系统以及各种软件开发平台,分析了主要的编程技术以及如何搭建交叉编
2、译平台,并对在Linux操作系统下的USB驱动程序进行了研究。本文重点讨论了图像采集、编码和网络通信程序的设计原理与实现。最后以提供的例子进行了系统整体测试,并提出了进一步开发设想。本文的研究结果具有较大的工程实际意义,并对基于IP技术的各种视频通信应用具有一定的参考价值。关键词: 嵌入式; Linux; 视频监控; TCP/IP; QT;Designand implementation of embedded monitoring systemAbstract This paper analyzes a network video monitoring system based on emb
3、edded Linux. The system uses embedded Linux as the core platform, video server based on TCP/IP protocol is established through the embedded platform, the image data collected by the USB camera to compression, through the network transmission, network video monitoring task of monitoring the scene. Th
4、is paper first describes the development status of embedded network video monitoring system, as well as the overall construction, then introduced the embedded Linux operating system and software development platform, analyzed the main programming technology and how to build the cross compile platfor
5、m, and in the Linux operating system under the USB driver program based on. This paper discussed the design principle and implementation of image acquisition, coding and network communication program. Finally, in order to provide examples of the system is tested, and put forward the plan of further
6、development. The results of this research have great practical significance, and the IP technology based on video communication application has some reference value.Keywords: embedded system; Linux; video; surveillance; TCP/IP; QTii目 录摘 要iAbstractii1.绪论11.1 研究背景及现状11.1.1 研究背景11.1.2 视频监控的现状11.2 研究目的和
7、意义21.3 本论文的主要工作31.4 论文总体结构32.硬件平台概述42.1 硬件平台介绍42.1.1 摄像头介绍42.1.2 运行硬件平台介绍52.2 软件平台介绍52.2.1 Linux操作系统52.2.2 QT62.2.3 Vi编辑器92.2.4 ARM交叉编译环境103.V4L2详细介绍123.1 V4L2概述123.1.1什么是V4L2123.1.2 V4L2的主要功能123.2 V4L2使用方法133.2.1 V4L2驱动的主要ioctl133.2.2 V4L2的主要结构133.2.3 V4L2操作流程144 .软件详细设计164.1 软件运行环境方案164.2 服务器设计方案1
8、64.2.1 视频采集初始化164.2.2 申请并设置视频采集的帧缓冲区174.2.3 视频传输194.3 客户端设计方案204.3.1 客户端界面204.3.2 录像功能234.3.3 拍照功能234.4 软件使用流程说明244.4.1 打开服务端24结 论29致 谢30参考文献31外文原文32中文翻译462北京邮电大学毕业设计 1.绪论1.1 研究背景及现状随着多媒体技术、信息电子技术和网络通信技术的发展,视屏监控系统正在朝着平台化、智能化和网络化的方向发展,嵌入式监控系统以其独有的微小性、稳定性、功能针对性而被广泛应用在各个领域。1.1.1 研究背景随着人类社会不断的向数字化、网络化、全
9、球一体化发展,人们接收的信息量越来越大。有人说:一切竞争都是对信息的竞争。信息的重要性正在逐步的被人们所意识到,人们在接受更多信息的同时,对能获取更多信息的意愿也变得更加强烈。从古至今,信息传输方式已经进行了好几次重大的变革:从最原始书信传递,到之后的声音传递,再到更加生动的图像传递,最后到现在高端的视频传递,都可以看做是人们获取更多信息量的意愿所推动的产物。俗话说:“百闻不如一见”。在这几项传输方式中,视频传递无疑是其中的佼佼者:首先视频可以真实地还原当时的情景,使传输的信息更直观、更有表现力,其次,视频信息具有非常高的真实性和说服力:文字可以造假,声音可以模仿,图片可以修改,而视频信息是非
10、常难以伪造的,而修改后的视频也很难不留下痕迹,可谓是最有说服力的信息之一。而视频还有传输信息量大的特点。因此,信息在信息的传输中具有举足轻重的地位。如今电子信息技术、计算机技术和网络通信技术正在飞速的发展,这也给视频信息的制作和传输提供了技术保证。在视频信息刚刚开始发展的时候,生动形象的视频虽然给人们带来了很多便利,但是也产生了一些问题:未经压缩的视频文件的数据量是非常之大的,动辄可达数十GB,而一张vcd光盘只有650MB,如果想要将一部视频完整的保存视频下来,则需要几十张vcd,这样大的数据量,即使放在现在的硬件设施和网络环境下,都是难以承受的,何况是当时还不算宽裕的条件.因此,必须对捕获
11、到的海量的视频数据进行高效的压缩,这有将数据压缩到一个合理的大小,才能解决视频的存储和传输等关键问题。1.1.2 视频监控的现状随着社会发展和科技的日新月异,视频监控技术在不断的发展并被应用到社会的各行各业,并因其所扮演的重要角色而受到人们的关注,目前视频监控系统的类别按信号的不同可以分为模拟监控和数字监控,按传输介质的不同可以分为有线监控和无线监控。模拟监控主要是由模拟摄像头构成的闭路监控系统。由于是早期视频监控系统的主要模式,所以在国内仍然被许多地方使用。由于采用闭路线缆进行数据传输,可以提供清晰可靠的视频信息,但是存在着许多较为明显的局限性:第一、传输的距离短,由于使用线缆,所以只能架设
12、在离视频采集点较近的地方,数据传输率较低,而且视频质量会受到传输距离的影响,如果距离过长会导致视频质量明显下降;第二、系统的可扩展性较差,由于电脑或电视上的接口有限,所以固定的设备只能接受有限的视频,没法充分利用计算机的处理能力,形成复杂的视频网络。第三、后期处理能力不强,无法利用视频处理技术处理捕获的数据,也就无法对视频进行筛选,只能存储所有的视频,降低了磁盘空间的利用率。第四、必须架设专线,无法利用现有网络,极大地浪费了资金,增加了系统的花销。但随着图像处理技术,计算机技术和网络通信技术的发展,出现了基于嵌入式技术的有线网络数字视频监控系统。相比于传统的模拟监控,它有很多优点:它拥有权限控
13、制,可以轻易的定制用户组,授权特定用户进行特定的工作。用户可以在浏览器上输入特定网址来进行系统的访问,实现视频监控、查看设备运行信息等功能,不需要携带庞大的专用设备,只需要在有因特网的地方就可以随时监控。给人们带来了极大的方便。因此基于嵌入式技术的网络视频监控系统有着良好的应用前景和发展前景,完美的替代了陈旧落后的模拟监控。随着无线技术的快速发展,数字监控系统在原有的网络监控系统的基础上,扔掉了网络电缆,改用无线的方式进行传输,使人们对视频操作的系统不再局限于有网络电缆的地方,WIFI的崛起和普及的速度人尽皆知,短短的时间内,WIFI热点遍布全球各个角落。只要在有WIFI的地方,你就可以用手机
14、、平板、笔记本等便携式设备连接因特网来访问视频监控系统,使视频监控系统变得更加灵活、可用性更高。即使你走到了一个没有WIFI热点的地方,你也可以使用成熟的3G/4G网络等无线数据通信方式、之前的2G/2.5G网络由于传输速率较低,无法完美地访问数据传输量大的视频监控系统,但3G网络的峰值速率可以达到153.6Kbps,4G网络的峰值数据更是可以达到惊人的100Mbps的恐怖速率,这样网络的速率就已不再是问题。如今国内大部分的无线视频监控系统所处理成的视频还是JPEG格式压缩,但是随着社会的发展,人们对视频监控系统的性能指标比如视频画面的大小、输出流的大小、传输的方式和实时性等方面也提出了更高的
15、要求,传统的JPEG压缩已经达不到人们对系统性能的要求,所以现在的视频监控系统大多已经投入了MPEG4或者H.264压缩技术的阵营。使用这些技术的视频监控系统大多都使用了第三方生产的专用芯片或者显示卡,还有第三方的视频解码库来实现对视频编码的压缩。这样做的好处在于可以使用第三方成熟的技术,快速的开发出实用的视频监控系统,并且无需在技术的研发上投入高昂的资金,从而缩短产品的研发周期,降低产品的研发费用。但是也带来了一些缺点:比如过分依赖第三方成熟的技术,从而使自己的技术核心竞争力变低、而且第三方产品的好坏直接影响到了自己商品的质量、长期来看成本依然偏高等问题。所以视频压缩技术在未来的应用前景和发
16、展前景必将一片光明。1.2 研究目的和意义在视频监控系统不断的发展、在人们日常生活中所占的比重越来越大的情况下,对视频监系统进行不断地研究,将这门课题研究的更加成熟,从而给人们带了更大的便利性已经成为了比较热门的方向,本文旨在了解并熟悉视频监控系统的发展背景和工作流程,并利用现有技术和平台制作出一套工作稳定、可用程度高、具有相关需要功能的视频监控系统。为以后更加深入的研究打下坚实的基础,同时抛砖引玉,在制作这套系统的同时,也对自己大学所学的知识和技术进行复习和总结,为以后即将到来的工作有一个非常好的准备。并且拓展思维,将自己不在局限于大学的学习生活和模式下,学会以一个软件开发者的角度来看待、了
17、解并解决问题。1.3 本论文的主要工作本文根据视频监控系统的工作流程,结合已经拥有的技术,打算开发一套基于Linux操作系统下的视频监控系统,监控系统通过视频摄像头来采集视频数据,在接收到视频数据后,服务器使用Linux下的V4L2格式对数据进捕获,并对信息进行必要的处理。之后通过TCP/IP的传输方式,将数据传输到客户端,客户端对传输的信息进行处理后,将其完整的显示在其屏幕上,并将视频压缩成通用的AVI格式保存,同时实现几个常用到的功能,比如说将视频的某个瞬间进行拍照并保存成图片等。本文笔者的任务如下:熟悉Linux操作系统,掌握Linux下的常用的操作命令。探索基于Linux平台下的软件开
18、发流程。熟练的掌握Linux下的各种开发工具,掌握Linux下对特定的视频摄像头的驱动程序的编写和读取。深入理解基于Linux下的Video for Linux 2的接口函数,用于捕获视频信息,仔细研究可以将图片压缩成视频的开源库,实现视频的压缩和存储。1.4 论文总体结构全文共分为五章,各章内容安排如下:第一章 绪论。介绍研究背景,并对视频监控系统的现状和发展情况做一个简要的说明,提出研究目的和意义,进一步明确研究目标以及所要完成的工作。第二章 视频监控系统的开发平台。对平台做一个简单的介绍,并介绍搭建的过程。第三章 V4L2的介绍与使用方式。对Linux下的Video For Linux
19、2进行详细的介绍,并详细讲述使用方法和重要函数。第四章 视频监控系统的软件设计和编码。软件部分采用模块化设计,通过对服务端和客户端的分别编码,实现整个视频监控系统的设计和实现。第五章 结束语。对所完成的任务进行总结,指出该系统的不足指出,以此来展望之后的研究。 502.硬件平台概述2.1 硬件平台介绍2.1.1 摄像头介绍摄像头(CREMA)作为一种视频输入设备,在电子技术成熟的今天被广泛的应用与视频聊天、视频会议、视频监控、远程医疗和视频摄录等方面,由于图像传感和解析技术的成熟,使得摄像头所摄录的图片和视频的质量有了明显的提高,同时由于硬件技术的成熟,摄像头的价格也在大幅度的下降。相比于传统
20、的、专业的摄像机等视频输入工具,摄像头具有体积小、使用性高、方便、即插即用等特性,如今人们在进行非专业的视频图像录制时,再也不需要扛着“长枪短炮”了,只需小小的摄像头并可达到录制的要求。摄像头正在取代着一部分的录制设备,在人们的日常生活中扮演着越来越重要的角色。摄像头一般被分为数字摄像头和模拟摄像头两大类。模拟摄像头可以采集的模拟视频信号转化成数字信号,之后将其存储到计算机里。模拟摄像头捕捉到的信号必须经过特定的设备将模拟信号转化成数字信号,并加以压缩后才可被计算机所运用,数字摄像头可以直接捕捉影像,然后通过USB或者串并口传到计算机里。目前市场上的摄像头主要是以数字摄像头为主,并且目前计算机
21、上的接口多为USB接口,所以数字摄像头又以USB接口数字摄像头为主,以下介绍USB数字摄像头。USB数字摄像头的工作原理为:景物通过镜头生成的光学图像投射到了光传感器的上面,由光传感器将其转化为电信号,经过A/D(模数转换)转换后变为数字图像信号,再送到数字信号处理芯片DSP中进行加工处理,将其转化为特定的图像格式,如JPEG格式,再通过USB结构传输到处理器中进行处理,实现图像显示存储或编码传输。USB数字摄像头结构图如图所示:图2-1 数字摄像头结构图 在组成摄像头的所有部件中,最重要、最为核心的两个部件是图像传感器芯片和DSP芯片。图像传感器是一种半导体芯片,其中表面包含有几十万到几百万
22、的光电二极管。光电二极管受到光照射时,就会产生电荷。它可以分为CCD和CMOS两类,光电二极管的芯能将直接决定摄像头的最大分辨率和图像质量。CCD的优点是灵敏度高,噪音小,信噪比大,但是生产工艺复杂、成本高、功耗高。CMOS的优点是集成度高、功耗低(不到CCD的1/3)、成本低, 但是噪音比较大、灵敏度较低、对光源要求高。从成本考虑,市场上大多还是采用CMOS的图像传感器,各厂商通过采用影像光源自动增益补偿技术,自动亮度、白平衡控制技术,色饱和度、对比度、边缘增强以及伽马校正等先进的影像控制技术,完全可以达到与CCD摄像头相媲美的效果。数字信号处理芯片DSP一般包括这三个模块:镜像信号处理器I
23、SP,JPEG图像解码器,USB设备控制器,主要功能是通过一系列的复杂数据算法运算,对数字图像信号进行优化处理(如压缩编码),并把处理后的信号通过USB等接口传到PC等设备。DSP芯片类型的不同将直接影响图片格式的差异。USB摄像头的图像格式主要有以下几种:JPEG格式,YUV格式和第三格式。其中第三格式是指厂家用自己的图像压缩算法对RGB格式的数据压缩后得到的图片格式。同一种图像格式的摄像头由于采集芯片型号的不同,捕获的图像数据流可能也会存在微小的差异,有些芯片会在JPEG图像数据前加一定的头部,有些则没有;有些YUV格式的芯片采用YYUV的数据流格式,有些则采用YUVY数据流格式。2.1.
24、2 运行硬件平台介绍本系统的的运行硬件为一台装有Linux虚拟机的Window操作系统的笔记本电脑,配置为:处理器i5,内存12G。2.2 软件平台介绍2.2.1 Linux操作系统Linux操作系统是一套可以免费使用和自由传播的操作系统,是一个是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux操作系统诞生于1991 年的10 月5 日。Linux存在着许多不同的Linux版本,但它们都使用了L
25、inux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。Linux的文件结构:/: 根目录所有的目录、文件、设备都显示在/之下,/是Linux文件系统的组织者,也是最上层的管理者。/bin:bin是二进制binary的英文缩写。在一般的系统当中,都可以再这个目录下找到Linux的最常用的命令。系统需要的那些命令经常位于此处。/boot:Linux的内核以及引导
26、系统程序所需要的文件目录,一般情况下,GRUB或者LILO系统引导管理器也位于这个目录。/cdrom:这个目录在刚刚完成系统安装的时候是空的,可以将光驱文件系统挂载到此目录上。/dev:dev是设备device 英文缩写。这个目录对所有的用户都十分重要。因为在这个目录中包含了所有Linux系统中使用的外部设备。但是这里并不是用来放外部设备的驱动的,而是一个访问这些外部设备的端口。可以非常方便的去访问这些外部设备,和访问其他的文件和目录没有任何区别。/etc:etc这个目录是Linux系统中最重要的目录之一。在这个目录下存放了系统管理时要用到的各种配置文件和子目录。要用到的网络配置文件,文件系统
27、,系统配置文件,设备配置信息,设置用户信息等都在这个目录下。/home:如果建立了一个用户,用户名是XX,那么在/home下就会有一个对应的路径名为/home/xx路径,用来存放用户的主目录。/lib:lib是库library英文缩写。这个目录是被用来存放系统动态连接共享库的。几乎所有的应用程序都会用到这个目录下的共享库。因此,不要轻易的对这个目录进行操作。/root:Linux超级权限用户root的家目录。/sbin:这个目录是用来存放系统管理员的系统管理程序。大多是设计系统管理的命令的存放, 是超级权限用户root的可执行命令存放地,普通的用户无权执行这个目录下的命令。/usr:这是Lin
28、ux系统中占用应哦按控件最大的目录,用户的很多应用程序和文件都存放在这个目录下。/tmp:临时文件目录,用来存放不同程序执行时所产生的临时文件。2.2.2 QTQT是一个由奇趣科技在1991年开发的跨平台C+图形用户界面应用程序开发框架。它可以开发GUI程序,也可以用于开发非GUI程序,比如控制台工具和服务器。QT是面向对象的框架,使用特殊的代码生成扩展以及一些宏,易于扩展,允许组建编程。2008年,奇趣公司被诺基亚公司收购,QT因此成为诺基亚旗下的编程语言工具。2012年,QT被Digla收购。Qt的优势:Qt具有优良的跨平台特性:QT支持包括Windows、Linux、UNIX等数十个系统
29、。面向对象:QT良好的封装机制使得QT的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。QT提供了一种称为signal/slots的安全类型来替代callback,这使得各个模块之间的协同工作变得十分简单。丰富的API:QT包括多达250个以上的C+类,还提供基于模板的collections,serialization,file,I/O device,directory management,date/time类。甚至还包括正则表达式的处理功能。支持2D/3D图形渲染,支持OpenGL。大量的开发文档。XML支持。常用类:QDialog:代表对话框,用来实现那些只是暂时存在的用户
30、界面,是独立的窗口,但通常也有父窗口。对话框有模态和非模态两种,非模态对话框的行为和使用方法都类似于普通的窗口,模态对话框则有所不同,当模态对话框显示时,其他窗口将全部进入非激活状态,不能接受键盘和鼠标事件。模态的方式又可分为两种,一种是对整个应用程序模态,这时它的出现将导致程序中的所有窗口失去响应;另一种是对窗口模态,这时仅仅会导致它所在的整个窗口树失去响应。构造:QDialog(QWidget *parent = 0, Qt:WindowFlags f = 0);模态性:void setModal(bool modal);/设置对话框的模态性,当modal为true时为模态,默认对整个应用
31、程序模态void setWindowModality(Qt:WindowModality windowModality);/设为对窗口模态.Qt:WindowModality有以下取值: Qt:NonModal:非模态 Qt:WindowModal:窗口模态 Qt:ApplicationModal:应用程序模态Qt:WindowModality windowModality() const;/得到窗口的模态性bool isModal() const;/判断窗口是否为模态的QLabel: 代表标签,是一个用于显示文本或图像的窗口部件构造:QLabel(QWidget *parent = 0, Q
32、t:WindowFlags f = 0);QLabel(const QString &text, QWidget *parent = 0, Qt:WindowFlags f = 0);/能够同时通过参数text给出要显示的文本,因此是最常用的构造方式属性:QString text() const;/获取显示的文本void setText(const QString &text);/设置显示的文本,这是一个槽const QPixmap *pixmap() const;/获取显示的图像void setPixmap(const QPixmap &pixmap);/设置显示的图像,这是一个槽void
33、setNum(int num);/设置显示的文本为代表整数num的字符串,这是一个槽void setNum(double num);/设置显示的文本为代表浮点数num的字符串void clear;/清空显示内容alignment代表显示内容的对齐方式:Qt:Alignment alignment() const;/获取对齐方式void setAlignment(Qt:Alignment align);/设置对齐方式Qt:Alignment有以下取值: Qt:AlignLeft:水平方向靠左 Qt:AlignRight:水平方向靠右 Qt:AlignHCenter:水平方向居中 Qt:Align
34、Justify:水平方向调整间距两端对齐 Qt:AlignTop:垂直方向靠上 Qt:AlignBottom:垂直方向靠下 Qt:AlignVCenter:垂直方向居中 Qt:AlignCenter:等价于Qt:AlignHcenter | Qt:AlignVCenter,即水平和垂直方向都居中indent代表文本的缩进值:int indent() const:/获取文本缩进值void setIndent(int indent);/设置文本缩进值 margin代表显示内容的边距:int margin() const;/获取边距void setMargin(int margin);/设置边距wo
35、rdWrap代表显示的文本是否允许换行:bool wordWrap() const;/判断是否允许换行void setWordWrap(bool on);/设置是否允许行换行scaledContents表示显示图像时是否允许缩放:bool hasScaledContents() const;/判断是否允许图像缩放void setScaledContents(bool on);/设置是否允许图像缩放,如果允许缩放,则显示图像时会进行缩放以填满整个显示区域 QPushButton:代表按钮,它继承了QAbstractButton,因此也有其全部的属性,信号和槽构造:QPushButton(QWid
36、get *parent = 0);QPushButton(const QString &text, QWidget *parent = 0);QPushButton(const QIcon &icon, const QString &text, QWidget *parent = 0);/text是按钮上显示的文本,icon是按钮的图标,生成的对象默认是没有开关状态的属性:bool isFlat() const;/判断外观是否为扁平状void setFlat(bool flat);/设置外观是否为扁平状如果为true,则按钮是扁平的,否则就是立体的如果一个按钮在对话框中,那么它就有默认和自动默
37、认的概念,分别由default属性以及autoDefault属性控制:bool isDefault(0 const;/判断按钮是否为默认按钮void setDefault(bool on);/设置按钮是否为默认按钮bool autoDefault() const;/判断按钮是否为自动默认按钮void setAutoDefault(bool)/设置按钮是否为自动默认按钮对话框中同一时刻只能有一个默认按钮,当用户按回车键时,等价于在对话框中单击这个按钮.实际上,对话框中还有一个主默认按钮的概念。一个自动默认按钮得到焦点时,就会变成默认按钮;失去焦点时,主默认按钮就成为默认按钮。而设置一个按钮的默认
38、属性为true将同时使它成为对话框的主默认按钮。2.2.3 Vi编辑器Vi编辑器是Visual interface的简称,通常称之为VI。它可以执行诸如输出、删除、查找、替换、块操作等众多文本操作,而用户可以根据自己的需要对其进行定制,这是其他编辑程序所没有的。Vi搬机器并不是一个排版程序,它不像Word或WPS那样可以对字体、格式、段落等其他属性进行编排,它只是一个文本编辑程序。没有菜单,只有命令,且命令繁多。Vi有三种编辑模式:命令模式、插入模式和末行模式。其中命令模式可以控制屏幕光标的移动,字符、字或行的删除,移动复制某区段进入插入模式下,或者到末行模式;插入模式用于做文字输入等相关操作
39、;末行模式用于将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号等。vi模式切换的方式如图所示。 图2-2 Vi模式切换方式 Vi的基本操作:进入vi:$ vi myfile切换至插入模式:在命令行模式下按一下字母i就可以进入插入模式。切换至命令模式:按下Esc键就可以进入命令模式。2.2.4 ARM交叉编译环境交叉编译是嵌入式开发过程中的一项重要技术,其主要特征是某机器中执行的程序代码不是在本机编译生成,而是由另一台机器编译生成,一般把前者称为目标机,后者称为主机。采用交叉编译的主要原因在于,多数嵌入式目标系统不能提供足够的资源供编译过程使用,因而只好将编译工程转移到高性能的主
40、机中进行,这就需要在强大的pc机上建立一个用于目标机的交叉编译环境。这是一个由编译器、连接器和解释器组成的综合开发环境。linux下的交叉编译环境重要包括以下几个部分: 1.针对目标系统的编译器gcc;2.针对目标系统的二进制工具binutils;3.目标系统的标准c库glibc,有时出于减小libc 库大小的考虑,你也可以用别的c库来代替glibc,例如uClibc、newlib等;4.目标系统的linux内核头文件。交叉编译环境的搭建方法:交叉编译环境搭建所需要的文件:binutils-2.15.tar.bz2:这个压缩包包含有ld,ar,as等一些产生或者处理二进制文件的工具。其主要目的
41、是为GNU系统提供汇编和连接工具等。gcc-3.4.5.tar.bz2:这个压缩包主要是为GNU系统提供C 编译器。现在支持多种语言,这其中包括C/C+、Fortran、Java、Objective-C、Ada等。glibc-2.2.5.tar.gz:Libc是很多用户层应用都要用到的库,用于定义系统调用和其它一些基本的函数调用。glibc-linuxthreads-2.2.5.tar.gz:这是Libc用于支持Posix线程而单独发布的一个压缩包。linux-2.6.8.tar.bz2:这个压缩包就是Linux的内核,在编译glibc时,要用到Linux内核中的include目录的内核头文件
42、。 3.V4L2详细介绍3.1 V4L2概述3.1.1什么是V4L2Video for Linux two(Video4Linux2)简称V4L2,是V4L的改进版。V4L2是linux操作系统下用于采集图片、视频和音频数据的API接口,配合适当的视频采集设备和相应的驱动程序,可以实现图片、视频、音频等的采集。在远程会议、可视电话、视频监控系统和嵌入式多媒体终端中都有广泛的应用。在Linux下,所有外设都被看成一种特殊的文件,成为“设备文件”,可以象访问普通文件一样对其进行读写。一般来说,采用V4L2驱动的摄像头设备文件是/dev/v4l/video0。为了通用,可以建立一个到/dev/vid
43、eo0的链接。V4L2支持两种方式来采集图像:内存映射方式(mmap)和直接读取方式(read)。V4L2在include/linux/videodev.h文件中定义了一些重要的数据结构,在采集图像的过程中,就是通过对这些数据的操作来获得最终的图像数据。Linux系统V4L2的能力可在Linux内核编译阶段配置,默认情况下都有此开发接口。V4L2从Linux 2.5.x版本的内核中开始出现。V4L2规范中不仅定义了通用API元素(Common API Elements),图像的格式(Image Formats),输入/输出方法(Input/Output),还定义了Linux内核驱动处理视频信息
44、的一系列接口(Interfaces),这些接口主要有:视频采集接口Video Capture Interface;视频输出接口 Video Output Interface;视频覆盖/预览接口Video Overlay Interface;视频输出覆盖接口Video Output Overlay Interface;编解码接口Codec Interface。3.1.2 V4L2的主要功能V4L2的主要功能是使程序有发现设备和操作设备的能力.它主要是用一系列的回调函数来实现这些功能。像设置摄像头的频率、帧频、视频压缩格式和图像参数等等。当然也可以用于其他多媒体的开发,如音频等。V4L2是为Lin
45、ux操作系统开发的,所以此框架只能运行在Linux操作系统之上。3.2 V4L2使用方法3.2.1 V4L2驱动的主要ioctl/*查询能力*/#define VIDIOC_QUERYCAP _IOR(V, 0, struct v4l2_capability) /*获得格式*/#define VIDIO_G_FMT _IOWR(V, 4, struct v4l2_format) /*设置格式*/#define VIDIOC_S_FMT _IOWR(V, 5, struct v4l2_format) /*申请内存*/#define VIDIOC_REQBUFS _IOWR(V, 8, strut v4l2_requestbuffers) /*获得Framebuffer*/#define VIDIOC_G_FBUF _IOW(V, 10, struct v4l2_framebuffer) /*设置Framebuffer*/#define VIDIOC_S_BUF _IOW(V, 11, struct v4l2_framebuffer) /*设置Overlay*/#define VIDIOC_OVERLAY _IOW(V, 14, int) /*将内存加入队列*/#define VIDIOC_QBUF _IOWR(