首页资源分类嵌入式系统 > 基于ARM的网络视频监控系统设计

基于ARM的网络视频监控系统设计

已有 445125个资源

下载专区

文档信息举报收藏

标    签:ARM监控

分    享:

文档简介

基于ARM的网络视频监控系统设计

文档预览

武汉理工大学 硕士学位论文 基于ARM的网络视频监控系统设计 姓名:郑捷航 申请学位级别:硕士 专业:通信与信息系统 指导教师:张维华 20100401 武汉理工大学硕士学位论文 摘要 目前视频监控以其直观方便、信息内容丰富而广泛应用于民用、军事、工 业领域等场合,在人们的日常生活中扮演着越来越重要的作用。本课题提出了 以飞思卡尔IMX27芯片为处理器的嵌入式监控系统的实现方案。本方案采用 ARM内部硬件编码模块编码,软件解码播放相结合的方法实现视频图像的采集、 编码、传输、解码、显示以及远程控制。该系统具有高性能、低成本、易安装、 可扩展等优点,有着非常广泛的实用前景。 本系统采用具有开发资源丰富、免费等优势的Linux操作系统作为软件开发 平台。该系统采用以太网作为网络传输介质,并使用TCP/口网络协议。视频数 据的传输协议选择了专用于多媒体数据传输的RTP/RTCP传协议,客户端在 Linux下实现了基于FFmpegI程组的视频解码和基于SDL库视频显示。 论文首先对视频监控系统研究的背景和意义进行了阐述,比较了几种常见 的视频监控系统解决方案,然后提出了嵌入式远程视频监控系统总体架构,并 逐步对硬件平台和软件模块设计进行了选择和细化完成。 在本方案中,硬件平台根据视频数据采集以及处理需要选择了飞思卡尔的 IMX27处理器,以及视频处理芯片TW2835;软件设计中,首先完成了嵌入式系 统的交叉开发环境搭建,同时将整个系统的软件部分分成了六个模块:视频前 端处理模块、视频采集模块、视频压缩编码模块、视频传输模块、视频解压显 示模块、WEB控制模块。本文主要完成了视频前端处理模块、视频采集模块、 视频传输模块以及WEB控制模块的实现。同时,本文对系统构建过程中所用到 的一些关键技术进行了比较详尽的探讨和研究。 关键词:视频监控IMX27 V4L2 RTP/RTCP WEB控制 武汉理工大学硕士学位论文 Abstract Currently video surveillance is widely used in military,civil,industrial areas and SO on,for it’S easily intuitive,rich content.and it plays atl increasingly important role in people’s daily life. The topics proposed an embedded processor monitoring system used Freescale’S IMX27 chip as MCU.The program uses ARM internal hardware encoding module coding,and software decoding method to achieve the acquisition, encoding,transmission,decoding,display and remote contr01.The system has high performance,low cost,and it is easy to install,scalable,etc.it has a very wide range of practical prospect.The system uses the Linux operating system as a software development platform.the Linux is a resource-rich and fijee operating system.The system uses Ethemet as the network transmission mediunl,and use the TCP/P network protoc01.Video data transfer protocol chosen RTP/RTCP transmission protocol that iS specifically used for multimedia data transmission.the client achieves video decoding based on FFmpeg project,and video display based on the SDL library. The paper first describes the background and significance video surveillance system,and the history ofdevelopment ofvideo surveillance technology,and related technologies,analyzes the status quo and development trend of video surveillance system at home and abroad.and introduced several common video surveillance system solution;and then present the general structure of embedded remote video monitoring system.and the hardware platforms and software module design are gradually selected and refined. The hardware platform chose Freescale’S IMX27 processor,and video processing chips TW2835 depending on the video data collection and processing needs;and then complete a cross-development environment for embedded systems to build programmer.and then the entire system is divided into six modules:video fi'ont-processing module,video capture module,video encoding module,video transmission module,the video decoding module and WEB control module.And then the paper describers the details of the video front—processing module,video WEB capture module,video transmission module and control module’S n 武汉理工大学硕士学位论文 implementation.At the same time,some key technologies used in the system are discussed. Keywords:video surveillance,IMX27 V4L2 RTP/RTCP,WEB.control III 独创性声明 本人声明,所呈交的论文是本人在导师指导下进行的研究工作 及取得的研究成果。尽我所知,除了文中特别加以标注和致谢的地 方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包 含为获得武汉理工大学或其它教育机构的学位或证书而使用过的材 料。与我一同工作的同志对本研究所做的任何贡献均已在论文中作 了明确的说明并表示了谢意。 学位论文使用授权书 本人完全了解武汉理工大学有关保留、使用学位论文的规定, 即:学校有权保留并向国家有关部门或机构送交论文的复印件和电 子版,允许论文被查阅和借阅。本人授权武汉理工大学可以将本学 位论文的全部内容编入有关数据库进行检索,可以采用影印、缩印 或其他复制手段保存或汇编本学位论文。同时授权经武汉理工大学 认可的国家有关机构或论文数据库使用或收录本学位论文,并向社 会公众提供信息服务。 (保密的论文在解密后应遵守此规定) 黜c㈣极黝缸…㈣;畏准许.卅·仁 武汉理工大学硕士学位论文 第1章绪论 1.1研究背景和意义 现在电子技术、计算机技术以及通信技术等飞速的向前发展,网络视频监 控系统在民用、军事、工业等各个领域得到越来越广泛的应用。用户能够通过 网络视频监控系统在远程便捷的得到高质量的监控图像。网络视频监控技术是 -I'-J集电子技术、计算机网络技术和视频技术于一体的综合技术【l】,具有方便、 直观、丰富等特点。目前计算机网络技术以及多媒体技术正在飞速向前发展, 远程自动控制技术也逐渐融入到视频监控系统中,同时视频监控技术也得到了 快速的发展。传统视频监控系统大多是以模拟图象监控为主,对视频图象的处 理和传输都采用了模拟技术,但是通过这种传统监控技术得到的图象质量比较 低,并且系统资源浪费,可扩展性比较差。当前的视频监控系统正由模拟化向 数字化转换,并且向系统网络化以及管理智能化等方向不断的发展。本课题对 嵌入式网络视频监控系统进行了相关研究,该系统结合了嵌入式系统技术、计 算机网络技术、图像处理、数字视频技术以及远程WEB控制技术。该系统不 仅图像质量高,而且用户使用方便,易于广泛推广使用,它不但解决了传统监 控系统的一些缺点,提高了监控系统功能,而且具有实际经济意义。 本课题提出了以飞思卡尔IMX27芯片为处理器的嵌入式网络监控系统的 实现方案。该方案采用ARM硬件模块编码,软件解码播放相结合的方法实现 视频图像的采集、编码、传输、解码、显示以及远程控制。同时,该系统具有 高性能、低成本、易安装、可扩展等优点,有着非常广泛的实用前景。 1.2技术现状与发展趋势 视频监控系统是一种防范能力非常强的综合系统,现在在安防系统起着越 来越重要的作用。交通、工业生产、银行、智能办公大楼等多种领域都广泛用 到了视频监控系统。在视频监控系统的发展史上,主要出现了三种类型的视频 监控系统。根据系统出现的年代先后顺序,这三种监控系统依次是基于模拟视 频的电视监控系统,基于数字视频的多媒体监控系统以及基于嵌入式技术的网 武汉理工大学硕七学位论文 络视频监控系统。前面两种技术已经发展的非常成熟,并且在实际工程中有着 广泛的应用,而嵌入式监控系统则是以计算机网络技术和视频压缩技术为核心 的一种新型数字视频监控系统。这类系统能够实时压缩采集到得视频数据,可 以将数据通过网络传输到世界各地,实时性得到了很大的提耐21。嵌入式网络监 控系统因为解决了模拟监控系统的部分弊端而得到了快速发展,但仍然需进一 步的完善。与传统的模拟视频监控系统相比,嵌入式视频监控系统其具有体积 小、携带方便、布控区域大、易组成复杂网络等特点,具有良好的应用发展前 景。 20世纪90年代末,随着嵌入式技术、图像处理技术、网络技术的迅速发展, 基于嵌入式的网络视频监控系统出现了。嵌入式系统是指以计算机技术为基础, 以应用为目标,软件硬件可裁剪,适用于各个专业领域的专用计算机系统。嵌 入式系统是由嵌入式处理器、外围的硬件电路、嵌入式操作系统以及应用程序 等四个部分组成的,主要实现对其他设备或各种环境的控制以及管理等。基于 嵌入式的网络视频监控系统的主要实现原理是:通过摄像头采集过来的模拟信 号经过内部处理转换为数字信号,然后通过软件或者硬件将数字视频信号压缩, 接着将压缩后的数字信号发送到网络或服务器上,经授权用户的可以在任意一 台联网的PC机上实时得到监控数据。嵌入式网络视频监控系统极大的提高了系 统的实时性以及稳定性,数据可以直接接入网络,只需一个授权的P地址即可远 程监测【31。同时用户不需要专门的监视播放器,比传统视频监控系统容易实现的 多,而且也价格便宜,易于扩展。正是由于这类监控系统具有易于使用、可靠 稳定、经济实用等特性,使得它有很好的发展前景。基于嵌入式和数字技术的 监控系统正在逐步取代模拟监控系统【4】。目前比较成熟的嵌入式视频监控产品有 网络摄像机【5】、嵌入式视频服务器等。 关于嵌入式监控系统的研究,国外起步较早,并处于领先水平,并且已有 成熟的嵌入式网络摄象机产品。除了SONY公司的SVC.VLl0N之外,还有安 特公司的ANT-NWCl0/50/100、Panasonie公司的Kx.HCMl30,瑞典的Axis系 列等,性能普遍较好【61,但它们的价格都比较昂贵,国内大多数的用户无法承 受。国内在这方面的研究刚起步,大多数是代理国外厂商的现成产品,从事实 际研究的单位不多。国内同类产品大多为一到两路输入,功能较少。播放速度 较慢,播放效果较差,科技含量有待于进一步提高。 2 武汉理工大学硕士学位论文 目前,国内外对基于嵌入式和网络技术的视频监控系统的研究,一般集中 于嵌入式视频监控系统的设计、嵌入式操作系统的研究、视频图像的网络传输 等几个方面。 在嵌入式视频监控系统方面一般是对于视频监控系统的设计与研究,例如 Desurmont Xavier设计并实现的一种实时优化的小型网络摄像机,这个系统由 图像传感器、图像处理电子卡、嵌入式处理器、网络接口等几部分组成,通过 背景差分算法和压缩优化算法可以使摄像机实现实时的图像压缩和传输等功 能,并能跟踪目标,该系统的主要特点是实时性的提高,实现了基于视频服务 器的视频网络监控;可以实现远程多路视频监控信号的web服务器等【71。 在对视频图像网络传输的研究中,有Heng BrianA等提出的一种利用多重 描述符编码的编程方法,以用来减少在网络传输中造成的丢失数据包,使端到 端的网络视频图像传输更为优化;同时P2P技术在在提高网络资源利用率以及 消除服务器瓶颈等方面起到了显著的作用【8】;在口组播方式下使用的网络视频 传输方案,可以大大的节约网络带宽,提高视频的播放效率;采用流媒体的格 式的方式传送视频图像数据,能够更好的实现视频的传输及播放等。 在视频监控领域有关视频图像处理的研究一般是通过一定的图形分析算法 来实现目标识别、跟踪,以及报警等功能。比如Furuya Tadasuke设计的一种低 成本的网络视频监控系统,可以实时对发生的情况发出警告。另外,新的视频 监控系统的研究也受到关注,比如对于一种新的录像监控系统一数字硬盘录像 机(Digital Video Record,DVR)的研究。数字硬盘录像机摒弃了传统的模拟数据, 采用了数字化的方式记录数据。这种方式具有存储量大、成本低、检索方便等 特点,在许多领域受到重用。 1.3研究内容与创新点 本文首先分析了嵌入式网络监控系统的背景和意义,接着分析了视频监控 系统的发展趋势,提出了一种基于IMX27的嵌入式网络监控系统的解决方案。 接下来介绍了系统的硬件设计方案,并且详细的介绍了视频监控系统中主要软 件模块的设计方案。最后介绍了整个系统的集成测试结果。 目前一般的嵌入式监控系统的主芯片都采用了¥3C2410,¥3C2440等ARM 处理器,但是这些芯片只具有控制功能,视屏编码需要外接专用编解码芯片或 者直接软件编码,这样增加了系统硬件设计的复杂度,给系统软件带来了较大 3 武汉理工大学硕士学位论文 的压力。在本课题中采用的微处理器是飞思卡尔的IMX27芯片,该芯片内含 VPU模块,能实现全双工硬件编解码,不占用CPU时间,能够高实时的传输 编码视频数据,解决了采用普通嵌入式处理器带来实时性不强的问题。 在传统的视频监控中,同一时刻只能监控一个视频图像,在本设计中采用 了TW2835视频处理芯片,能够同时监控4路视频图像,节约了监控成本。同 时在一般的网络远程监控实现方案中,客户只能被动的接收数据。在本设计中, 客户可以通过网页主动要求数据的传输,改变监控图像的参数等。 同时在本方案中,用户可以通过WEB控制模块来实现客户与服务器之间 的互动,在客户端可以通过网页来完成视频监控的启动、参数设置、图像裁剪 和伸缩处理等。 4 武汉理工大学硕士学位论文 第2章网络视频监控系统总体设计 2.1网络视频监控系统总体方案 当前主流的视频监控系统方案中采用的处理器有ARM和DSP两种,表2-1 总结了目前主流的视频监控系统方案的优缺点: 表2.1主流的视频监控系统方案的优缺点 方案 优点 缺点 1.DSP+视频采集芯片 速度快、图像处理能力 无操作系统,不易扩 强 展 2.DSP+ARM 速度快、图像处理能力 设计、调试难,成本 强、容易扩展 高 3.ARM+视频采集芯片 开发容易、成本低、易 图像处理弱 控制 由上面的比较得知,方案1采用DSP+视频采集芯片组合,尽管速度快, 但是由于DSP上面没有运行操作系统,系统控制功能比较弱、扩展比较难,不 易实现网络的拓扑。方案2在DSP的基础上增加了ARM处理器,加大了系统 的灵活性,能够实现硬件编码,软件解码播放,同时能够通过ARM处理器实 现网络的传输。但是DSP和ARM的联合设计难,联调不易,而且成本颇高, 不易广泛推广使用。方案3采用了ARM处理器和视频采集芯片,因为一般的 ARM芯片里运行了嵌入式操作系统,并且支持网络协议栈,这样可以方便的 实现视频数据的网络传输,增加了系统的灵活性和可扩展性。但是视频图像的 压缩需要由软件来实现,会给微处理器带来较大的压力,影响到整个系统的实 时性【1引。 目前市场上出现了许多嵌有视频硬件编解码模块的ARM芯片,可以通过 这些模块实现对图像数据的硬件编码,这样不占用CPU时间,极大的提高了系 统性能,这很好的解决了方案3中遇到的难题。比如飞思卡尔的IMX27,IMX31 等ARM芯片,海思的Hi3560等。采用这些芯片,不仅提高了系统图像处理能 力,而且能够增加系统的灵活性,较易实现监控视频数据的传输、网络控制、 武汉理工大学硕士学位论文 存储等。本课题采用的解决方案正是ARM(带视频编解码模块)和视频采集芯片 的组合方案。 2.2网络视频监控软件体系 2.2.1软件体系结构 从摄像头采集过来的CVBS模拟信号经过视频处理芯片TW2835的处理 后,得到符合ⅡU.R656的数字视频信号。IMX27通过其CSI接口读取数字视 频信号,该数字信号通过内部eMMA模块(多媒体硬件加速器)预处理后输入内 部Ⅵ)U编码模块。经过VPU编码模块编码后的压缩数据通过网络传递到监控 主机,在主机上面对压缩数据解压显示。 因为在本方案中要实现通过网络远程监控的功能,所以本系统采用了C/S 架构,即客户端.服务器的架构。在该C/S模型中,客户机可以远程控制服务器 端监控状态,可以启动或者关闭监控功能,以及修改监控的一些参数。而服务 器端则一直准备接受客户端的要求。图2.1为整个方案的系统软件框图。 本方案采用V4L2库来管理视频数据的,使用RTP/RTCP协议来控制数据 的网络传输。在客户机上面,本方案采用FFMPEG工程组提供的库函数来对数 据解压,调用SDL库函数来显示播放视频信号。同时通过THTTPD协议栈来 实现远程监控。 6 武汉理工大学硕士学位论文 图2.1系统软件框图 2.2.2操作系统 在高端的嵌入式系统中,开发者会根据实际的需要在处理器上运行功能强 大的操作系统,这样更容易实现系统功能的扩展。一般的嵌入式操作系统都会 提供进程调度管理、进程间的通信、内存管理、文件系统管理等功能。开发者 可以利用这些功能方便的处理多任务问题,并开发出高质量的应用程序。目前 几种常用的嵌入式操作系统有WindoWS CE、Linux、pSOS、Vxworks等。在本 系统中采用的就是嵌入式Linux操作系统。开发者采用Linux开发应用程序具 有如下的一些优点117】: (1)开放源代码,成本很低。Linux源代码是对开发者开放的,用户可以直 接从网上免费下载。同时Linux也遵循GPL协议。相比之下WINCE、VxWorks等 操作系统需支付一定的版权费。 7 武汉理工大学硕士学位论文 (2)广泛的硬件支持。Linux几乎支持了所有的主流的处理器,包括有X86、 ARM、MIPS、PowerPC等结构的处理器,而WINCE只支持4种处理器。 (3)高效稳定的内核。Linux的内核被设计成五个部分:进程调度管理、进 程间的通信、内存管理、虚拟文件系统、网络接口。这五个部分之间互相依存, 非常稳定的支持用户的应用程序运行。同时,Linux也采取了很多的安全措施, 比如对读、写进行权限控制等。 (4)优秀的开发工具。嵌入式Linux开发不需要在线仿真器。只要硬件平台 能提供串口功能,开发者就可以很好的开发Linux应用程序。 (5)强大的网络支持和文件管理机制。Linux支持几乎所有的标准网络协议, 以及嵌入式的TCP/IP网络协议栈。同时Linux还支持ext2、rotors、fat32等文 件系统,实现了稳定的文件管理机制。 2.2-3交叉编译环境 所谓交叉编译环是指用户在一个开发平台上面编辑、编译在另外一个平台 上运行的程序。在嵌入式开发的过程中,编辑、编译和执行是在不同的平台上 执行的。编辑、编译和链接源程序是在宿主机上进行的,而开发出来的程序不 能再宿主机上运行,只能在目标机上执行。也就是说必须在PC机上建立好交 叉编译环境,然后在这种条件下编辑、编译适合在特定目标机上执行的程序。 接着将可执行文件通过串口或者并口、网络、USB等方式下载到目标机的存储 器或者内存里,在目标机里执行该文件。在这里所说的编译器和开发PC机应 用程序所需要的编译器的功能都是一样的,同样是通过编译器将各个源文件编 译成相应的目标文件,然后再通过特定的链接器、可重定位器程序等将目标文 件定位成可执行的文件,不同的地方在于,该可执行文件不能够再PC机上运 行,只能在特定的目标机上运行【18】。 本方案使用的是飞思卡尔的IMX27芯片,采用飞思卡尔提供的工具链来建 立交叉编译环境。具体过程如下: 1.首先建立目录/opt/fi'eescale/usr/local,然后转向该目录。 #mkdir/opt/freescale/usr/local #cd/opt/freescale/usr/local 2.将飞思卡尔提供的工具链包mx27一mdk.toolchain.tgz拷贝到 /opt/fleescale/usr/local目录下。 武汉理工大学硕士学位论文 #cp~/mx27·mdk—toolchain.tgz 3.解压工具链包 /opt/freescale/usr/local #tar-xzvf mx27一mdk-toolchain.tgz 解压后工具链将会被安装在目录 /opt/freescale/usr/local/gcc一4.1.1一glibc-2.4-nptl—sf-l/arm一926ejs-linux/bin 下。 4.设置环境变量 #export PATH=/opt/freescale/usr/local/gce-4.1.1一glibc-2.4一nptl—sf-1/ anti-926ejs-linux/bin:¥PATH 2.3网络视频监控硬件系统 2.3.1网络视频监控结构设计 基于ARM的网络监控系统前端采用视频处理芯片处理由摄像头采集而来 的模拟信号,并且经过压缩编码后通过网络发送到视频数据申请者。视频需求 者通过软件解码数据,并且在PC机上播放和处理。同时视频需求者可以通过 WEB来启动远程视频监控和调整视频监控参数,获得所需视频数据。图2.2为 系统整体结构图。 该系统中采用了飞思卡尔的基于ARM926EJ—S内核的IMX27微处理器, 在处理器上运行了Linux操作系统,接收来自视频处理芯片TW2835的视频信 号,经过内部处理的视频信号由IMX27内部快速网卡(FEC)发送到远程PC。同 时在IMX27处理器上面构建了微型的WEB服务器,实现和远程客户的交互。 9 武汉理工大学硕士学位论文 视频采集 T、^,2835 触摸屏LCD JTAG调试器 : 工 CPU单元 i.mx27 ‘叫J速!!网望口7内F部EC快|.厂 远程 PC T + NAND FLASH 256·M T + DDR 128M 图2-2系统整体结构图 2.3.2处理器和视频处理芯片 表2.2列出了市场上主流的几种附带硬件编解码模块的处理器。从表2.2 的比较来看,MX27在视频编解码的性能方面是处于领先地位的,它可以实现 全双工的H264、MPEG4硬件编解码。MX31是飞思卡尔的一款ARMl 1处理 器,主频可以达到531MHZ,但是只含有MPEG4的硬件编码单元,需要在软 件上实现解码,同时该芯片的功耗也比较大。至于海思Hi3510,Hi3560则采用 的是ARM+DSP双核架构,其中海思3560只有解码,没有编码,它的解码性 能和IMX27相当,海思Hi3510可以实现H264的硬件编解码,解码仅仅支持 CIF分辨率,编码支持1路D1或者4路CIF编码,没有MX27全面。TI达芬 奇TMS320DM6446处理能力非常强大,也非常的灵活,但是价格非常昂贵, 不适合推广使用。综合以上的比较,IMX27是一款非常理想的用于多媒体处理 的ARM芯片。 本方案中采用IMX27作为嵌入式网络监控系统的主处理器。IMX27是飞思 卡尔推出的一款适用于多媒体应用的处理器,它内部集成了H264LMPEG4全双 工的硬件编解码视频处理单元。广泛用于视频监控、数字录像机、广告机、V2IP 电话、IPTv机项盒等领域。IMX27是基于ARM926EJ.S的ARM的芯片,它 内部的编解码模块可以达到D1分辨率:720*576@,25fps,720*480@30fps:全 双工编解码可以达到VGA分辨率:640*480@30fps。其内部的编解码是通过 CPU内部的ASIC实现的,而不是通过集成ARM和DSP的双核SOC实现的, 因此IMX27的功耗相比双核处理器功耗更低,系统性能更强。同时IMX27内 10 武汉理工大学硕士学位论文 部还还带有eMMA多媒体加速器,用来对图像进行缩放、旋转、镜像等处理。 IMX27处理器的主频高达400MHZ,内部同时集成了快速以太网控制器 (FEC),SD/SDIO,高速USB OTG等模块,易于实现系统的扩展。 表2.2主流的附带硬件编解码模块的处理器 MCU H.264硬编码 H.264硬解码 MPEG4硬编码 MPEG4硬解码 ~D【27 MX31 720x576@25fps 720x480@30fps 无 720x576@25fps 720x480@30fps 无 720x576@25fps 一 一 720x480@30fp H.263 720x576@25fps 720x480@30fps 无 海思 D1 VGA@30fps CⅢ 无 无 Hi3510 720x576@30币s 352x288@30fps 海思 无 H.264 无 ASP@L5,D 1 Hi3560 TI达 芬奇 720x576@30fps 1MS320DM6446,(1)H.264 MP@L3,30fps SD解码;(2)VCI/WMV9 Full D1 SD解码;(3)MPEG-2 MP@ML SD解码;(4)MPEG-4 ASP Full D1 SD解码。(5)H.264 BP D1编码; 在本方案中视频采集芯片采用TW2835,它支持四路的模拟音频输入,一 路模拟音频输出,四路模拟视频输入,两路模拟视频输出。提供三个BT.656/601 格式的数字I/O视频接口和两个数字音频I/O接口可以和处理器连接传输视频 和音频数据。通过配置寄存器可以实现多路视频传输。同时TW2835输出通道 分为Display以及Record Path两个通道,分别用于实时显示和记录功能。其中 Display Path可以处理八路视频输入。图2.3为其功能框图。 武汉理工大学硕士学位论文 图2.3 TW2835功能框图 2.3.3主要电路 (1)存储器电路设计 在嵌入式系统中存储器主要采用FLASH存储器。一般采用的FLASH有 NORFLASH和NAND FLASH两种。NOR FLASH能够芯片内执行(Ⅻ), 但是它的写入和擦除速度低。NAND FLASH的写入和擦除速度高,但是它的 接口特别复杂,需要用复杂的I/O口复用来串行存储数据,不能够实现片内执 行。NORFLASH带有SRAM接口,处理器能够方便的存取其内部的每一个 字节。但是从容量和成本来讲,NAND FLASH容量大,价格低【14】。在本方案 中所采用的是含有256M字节容量的NAND FLASH芯片:K9F2G08ROA。本 方案中该芯片采用的工作电压为1.8V。同时地址、数据、命令复用8位串行哟 端口。在IMX27内部具有NAND FLASH控制单元(NFC),直接控制NAND FLASH的读写行为。NAND FLASH与IMX27的接口电路图如图2-4。图2_4 中I/0115:O】为串行数据线,/RE、/WE为读写控制线,/CE为芯片选通线。 12 武汉理工大学硕士学位论文 NAND FLASH D[15:0】 NFCE B NFCLE NFALE NFRE B NFWE B NFRB I/o[15:0】 ICE CLE ALE /RE /WE R/B IMX27 图2.4 NAND FLASH与IMX27的接口电路图 (2)DDR存储接口设计 在嵌入式系统中广泛的采用SDRAM(动态随机存储器)作为系统的内存运 行单元。SDRAM的单位空间内容量大,而且价格非常便宜。SDRAM的存储 单元类似一个充电的电容,需要及时刷新,否则充电的电容就会放电,数据就 会丢失,因此必须为SDRAM定时充电。在IMX27内部具有SDRAM的刷新 控制单元,可以方便的为连接到处理器上的的SDRAM定时刷新充电【15l。当给 系统上电后,BOOTLOADER程序首先会将自己拷贝到RAM中运行,然后再 将内核从flash下载到SDRAM中并且开始启动系统【161。DDR也就是DDR SDRAM,全称是双倍速率同步动态随机存储器,它是在SDRAM的基础上发 展 时而 钟来 的的 上。 升S期D和RA下M只降是期在各时传钟一周次期数的据上,升因沿此进它行的数速据度的是传标输准,SD而删D的DR两却倍能。在 本系统中采用的是DDR型号是HYBl8M1G320BF,它具有128M大小的空间。 DDR与IMX27的接13电路图如图2.5。图2.5中,SD[31:0】是数据线,A[26:0】 地址线,/CS为片选通线,/WE是读写控制线,CLK为时钟线。 DDR DO.[31:0】 A[26:0】 CSDO B SDWE B SDCLK SD[31:0】 A[26:0】 /CS /WE CLK IMX27 图2.5 DDR与IMX27的接口电路图 (3)视频采集模块TW2835接口电路 武汉理工大学硕士学位论文 处理器可以通过两种通信方式来访问TW2835,一种是通过12C访问,另 外一种是通过并口访问。在本方案中采用的是12C访问方式。TW2835与IMX27 的接口电路图如图2.6。 在本设计中中,TW2835引脚VINOA,VINlA,VIN2A,VIN3A分别用来接由 模拟摄像头采集进来的CVBS信号。TW2835的HSPB管脚被拉高,处理器采 用12C方式访问芯片,其中TW2835的HDAT[7]为SDAT线,HALE为SCLK 线。由TW2835的HDAT[0].HDAT[6]来确定芯片从地址。VDOX0.VDOX7与 IMX27上的CSI接口相接,传输采集到得视频数据。 VDOX[7:0】 HSENC TW2835 VSENC CLKVDOX HDAT[7】 HALE CSI—D【7:0】 CSI HSENC CSl VSEN CSI PIXCLK 12C1..DAT 12C1 CLK IMX27 图2-6 TW2835与IMX27的接口电路图 14 武汉理工大学硕士学位论文 第3章网络视频监控系统软件详细设计 3.1网络视频监控功能模块 3.1.1网络视频监控模块划分 网络视频监控端启动以后,会等待客户端的请求,当客户端通过WEB发 出请求监控命令以后,监控端开始采集从摄像头采集过来的模拟视频数据;模 拟视频数据经IMX27内部编码模块处理后通过网络传输到客户端,客户端对视 频数据进行解码操作并且显示播放。该方案的技术路线如图3.1。 Se CIi 图3.1方案技术路线图 根据上面的视频数据的流程,可以将整个系统的软件开发分为几个模块, 主要包括有视频前端处理模块、视频采集模块、视频压缩编码模块、视频传输 模块、视频解码显示模块、WEB控制模块。下面分别介绍各个模块需要实现的 功能。 1.视频前端处理模块。该模块的功能是处理摄像头采集过来的CVBS模拟 信号,将其转化为符合ITU.R656格式的数字视频信号。该模块中需要完成的 武汉理工大学硕士学位论文 是实现TW2835的驱动程序,主要工作是在LINUX环境下配置TW2835内部 各个寄存器,让其能够按照需要将四路或者其中的一路模拟信号转换为数字信 号,并且能够正常、稳定的工作。 2.视频采集模块。IMX27是通过CSI(CMOS Sensor Interface)来获取数字视 频信号。在该模块中需要实现以下几个部分: (1)IMX27下CSI模块实现视频数据的获得。 (2)IMX27下emⅣlk模块对视频数据的预处理。 (3)基于V4L2(video for linux 2)的视频采集驱动以及应用程序的实现。 3.视频压缩编码模块。IMX27通过CSI采集到数字视频信号后,可以通过 内部e]VIIVIA模块对视频数据进行预处理,然后通过内部vPu(video proeessing unit)模块实现硬件的编码。在上位机中采用软件解码。该模块的主要任务就是 实现VPU模块对数字视频数据的压缩,在本方案中对视频数据实现了H264格 式的压缩。 4.视频传输模块。因为要实现基于网络的远程视频监控,本方案采用通过 网络的方法来将视频数据传输给用户。本方案采用的是RTP/RTCP协议来传输 视频数据,使用开放源代码的ORTP库来实现视频传输。 5.视频解压显示模块。解压模块采用FFmpeg工程组提供的库函数。 FFmpeg是一个开源的视频和音频流解决方案,它是自由软件,采用GPL许可 标准。而显示模块则采用SDL的库提供的方案。 6.WEB控制模块。用户需要远程通过WEB来控制视频监控的过程,则需 要将视频采集端设计成一个小型的网络服务器。本方案中采用的是THTTPD 协议栈。通过它来实现客户端与服务器端的远程交互。 由于篇幅原因,本文只详细介绍视频前端处理模块、视频采集模块、视频 传输模块以及WEB控制模块,其他模块只做简单的介绍。 3.1.2 Linux模块编程关键技术 Linux内核是各个模块组成的,同时它允许内核在运行时动态的向内核插 入或者删除模块。Linux中所提到的模块实际上就是在内核空间中运行的程序, 是一种目标对象文件【19】。设备驱动就是通过模块的方式来实现的。使用模块有 以下几个优点: 16 武汉理工大学硕士学位论文 1.基本内核对象可以尽可能的缩小,可以通过模块的方式提供驱动或者其 他可选功能,需要的时候再将其加入内核。 2.调试简单。可以方便的删除和插入模块代码。 3.修改内核时不用全部重新编译整个内核,节约了不少的开发时间。 Linux提供了以下一些命令来操纵模块: insmod:插入模块。 nnmod:删除模块。 modprobe:高级加载或者删除模块的方法,可以解决模块之间的互相依赖 的问题。 modinfo:用于查询模块的一些相关信息。 同时Linux也提供了如下的一些宏定义来获取一些常用信息: MODULE AUTHOR(”author¨):相关作者信息 MODULE DESCRIPTION(”the description”):描述模块 MODULE LICENSE(”GPL¨):版权 MODULE SUPPORTED DEVICE(”dev”): 设备驱动程序所支持的设备。 在插入模块的时候也可以带参数。相关的宏定义有: MODULE_PARM(var,type); MODULE_PARM_DESC(var,”the description of the var”); Linux的模块只是一个目标代码,,需要把它整合到Kernel中去,才能够 被内核中的其他模块调用。所以一般的模块都需要导出一定的变量或者函数, 即符号。,以供其他模块调用。Linux提供了如下的宏定义。 EXPORT SYMBOL(vat): 输出变量vat。 EXPORT SYMBOL :输出变量 var,版权为 GPL 。.GPL(var) 由3.1.1节的分析可知,整个系统将被分成几个模块来实现。包括视频的前 端处理、视频编码、视频采集、视频传输、视频的解码显示以及WEB远程控 制等。显然如果将这些模块放在在一个顺序执行的控制流中实现,会影响到整 个系统的工作效率以及监控的实时性。所以在本方案实现中采用了Linux多线 程编程技术。系统中的各个模块都是在各个单独的线程中实现的。 在操作系统理论中,将进程中一个单一顺序执行的控制流称作线程。线程 进程中的实体,一个进程中可以包含多个线程,而且至少要包含一个主线程。 父进程的资源,包括地址空间等【20】被线程和父进程中的其他线程一样共享。系 统资源管理的最小单位是进程,而程序执行的最小单位则是线程,系统只需要 17 武汉理工大学硕士学位论文 在线程运行时分给它一些必要的数据结构而已。根据线程的调度者我们可以将 线程分成内核态线程和用户态线程两种。由内核程序调度的线程称为内核线程, 内核线程可以发挥多处理器的性能优势。从内核调度程序的角度来看,进程中 的各个线程都被视为不同进程。对于内核调度程序来说,线程是不可见的,线 程的调度是在内核态下进行的。调度的高效性是用户线程的最大优点。 在Linux环境下,当调用f.ock函数生成一个新的子进程时,系统会给该进 程创建虚拟地址空间,包括只属于该进程的代码段、数据段以及堆栈等。从这 里可以看出在创建一个新的进程的过程中会开销大量的系统资源。由于进程中 的各个线程都共享该进程的地址空间,以及其他的一些数据,因此启动一个线 程的开销要远远小于启动一个新的进程所需的开销,只需要分配给线程有关的 少量数据结构即可。同时切换进程的开销也要远远大于切换线程的开销。而且 不同的进程都运行在它们相对独立的虚拟地址空间,因此需要采用特殊的方式 来实现进程间的通信,而线程可以直接访问属于同一个进程中的其他的线程的 数据。因此采用多线程编程比多进程具有更高的效率。在Linux环境下是通过 调用PTHREAD库函数来实现多线程编程的【21】。 在上面的功能模块分析中,会出现多个线程访问视频数据这一共享资源的 现象,比如在本方案中客户端专门用于接收视频数据的线程和专门用于对线程 数据进行解码操作的线程可能会同时去访问视频数据,必须保证在同一时刻只 有一个线程来访问视频数据这个共享资源。在Linux环境下一般采用互斥锁来 完成多线程的互斥与同步。 多线程编程可以采用互斥锁来实现对共享资源的互斥访问。假设系统中存 在两个试图访问同一共享资源的线程:线程A和线程B。当线程A试图锁定一 个互斥锁之前,线程B已经锁定了该互斥锁,这时系统会将线程A阻塞,线程 A会进入睡眠状态,直到线程B释放该锁【2引。 3.2视频前端处理模块 所谓视频信号的前端处理,是指将从摄像头进来的模拟CVBS模拟信号转 化为符合rrU.R656格式的数字信号。图3.2是视频采集端对视频信号的处理过 程图。 武汉理工大学硕士学位论文 (::::!i!弹。。。。。。。’。’ IM×27 ∈≥粤…35 ∈眇鼍 > ITU-R656 ∈岁鼍 C¥1采集 U ● ●●● ●● ● ● eMMA多媒体加速 U VPU硬件编码模块 图3.2视频采集端对视频数据的处理过程 CVBS的全称为Composite Video Broadcast Signal,即是复合电视广播信号。 它是模拟图像信号与语音信号的结合体调制到射频载波的一种数据格式。它用 模拟载波来传输数据。复合视频信号包括有色差和亮度信息,他们被同步在消 隐脉冲中,并且是使用同一个信号传输的。 ITU.R601/656原名CCIR601/656,是由国际电信协会提出来的一个视频标 准。它定义了通过串行或者并行的硬件接口来传送一路符合YCbCr 4:2:2标准 格式的数字视频流【23。。 几种常用的色彩模型有RGB、CMYK、ⅥⅣ等。M吖是欧洲电视系统中 采用的一种颜色编码方式。其中Y代表亮度,UV代表色差。通常将摄像头或 者CCD采集进来的图像信号被分色、放大校正后得到标准的RGB格式数据, 然后再通过矩阵变换电路将RGB格式的数据换算成亮度信号Y和两个色差信 号R-Y(且P U),B.Y(UP V)。YCbCr是将YUV缩放和偏移的翻版。其中Y与 YUV格式中的Y含义一样,都是指亮度,Cb、Cr同样都指色彩,Cb指 的是蓝色色度分量,而cr指的是红色色度分量【241。 在本方案中,由摄像头采集过来的模拟视频信号经过TW2835芯片处 理后得到符合4:2:2格式的YCbCr数字信号。 在视频前端处理模块中,主要任务是实现LINUX环境下的TW2835的驱 动程序。在驱动程序中要配置TW2835内部各个寄存器,让TW2835芯片按照 视频处理要求稳定的工作。下面介绍TW2835驱动的实现过程。 19 武汉理工大学硕士学位论文 3.2.1通过TW2835获取视频数据 TW2835是一款四信道视频与音频控制高度整合的多媒体处理芯片,它支 持四路的模拟音频输入,一路模拟音频输出,四路模拟视频输入,两路模拟视 频输出。TW2835包含4个高质量的NTSC/PAL视频解码器。本方案中通过 TW2835获取摄像头传输过来的CVBS模拟视频信号,在TW2835的驱动中需 要对其内部寄存器进行配置,让它按照要求采集视频信号。 TW2835内部寄存器共有3页,分别为Page0、Pagel、Page2,其中每一页 包含256个寄存器。其中Page0主要是用来控制视频解码的参数,Pagel主要 是用来实现视频控制和视频编码的参数,Page2主要用来定义实现OSD、运动 检测、工具箱和鼠标等功能。处理器可以通过两种方式来访问TW2835内部寄 存器,一种是通过并行访问方式,在这种访问方式下由引脚CSB0和引脚CSBl 确定页地址是。当CSB0=0,CSBI=0时,表示访问的是Page0内寄存器; CSB0=I,CSBI=0时,表示访问的是Pagel内寄存器;CSB0=0,CSBI=I时,表 示访问的是Page2内寄存器。另外一种访问方式是串行访问方式,即处理器通 过12C总线来访问芯片。在这种访问方式下,由引脚HDAT[6:I]和引脚HCSB0 确定该芯片的12C从地址。由于通过串行访问方式占用硬件资源少,而且速度 快,所以在本方案中TW2835的驱动实现中采用的是串行访问方式。 12C总线是由飞利浦公司开发出来的两线式的串行总线。它主要用来实现 处理器和外设之间的通信。由于只占有时钟线和数据线两根线,占资源非常少, 但是其通信速度最高可以达到400Kbits/s,因此在嵌入式开发中被广泛运用于 处理器与外设之间的通信【25】。 12C采用主从通信机制,在12C总线上有一个主设备,同时可接多个从设 备,每个从设备都具有不同的从地址【261。主设备就可以通过这个唯一的从地址 访问到具体的设备。数据线SDA和时钟线SCL构成了12C总线,主从设备间 可以通过12C总线实现双向通信。在通信中,数据传输的方向是由主设备产生 串行时钟SCL来控制的,只有在SCL时钟线低电平的时候改变SDA数据线上 的数据状态才有效,如果在SCL时钟线高电平的时候改变则表示产生某种命 令。 Linux系统下的12C体系结构是由12C核心、12C总线驱动和12C设备驱动 3个部分组成的【2‘71。这三个部分之间互相作用形成了适用性很强的12C系统框 架,一般在Linux下12C设备的驱动开发都是在这个框架下进行的。 20 武汉理工大学硕士学位论文 L2C核心主要主要实现了对12C总线驱动和12C设备驱动的管理,实现了 总线驱动和设备驱动的注册以及注销的方法。12C核心中还包括了一些12C通 信中与具体的适配器无关的上层代码,以及在检测设备和设备地址过程中的与 适配器无关的上层代码。 12C总线驱动,主要是实现对12C适配器的控制访问。12C适配器是由处理 器控制的,现在一般的ARM芯片内部都集成有12C适配器。总线驱动的任务 是直接操作适配器中的各个寄存器,实现具体的12C访问方法。通过总线驱动, 我们可以通过适配器产生12C的启动信号、结束信号、ACK确认信号等,以及 实现数据的传输等。12C总线驱动不主动发生动作,而是等待12C设备驱动的 调用。在总线驱动中最重要的两个结构体就是12C适配器数据结构i2c.adapter 和12C适配器通信数据结构i2c algorithm。 12C设备驱动,它主要是通过12C总线驱动来实现对外设的访问。在设备 驱动中最重要的两个数据结构体是i2c driver和i2c client。 由于在飞思卡尔提供的Linux源代码包中已经实现了基于12C core架构的 12C总线驱动,因此本驱动程序的开发主要集中在TW2835的设备驱动上面, 用来配置TW2835内部寄存器,实现一些特定的视频采集功能。 一个12C设备驱动程序一般需要实现两个接口,其中一个是对12C Core的 接口,调用12C总线驱动的函数来控制具体的12C适配器来实现对外设的具体 访问方法。另外一个就是对应用程序用户层提供的接口,实现open,release, close,read,write以及ioetl等标准的文件操作的接口函数,应用程序通过这些 接口函数来访问设备。 在本驱动设计中不需要为TW2835实现文件操作的接口函数,在内核中直 接调用总线驱动来完成对对TW2835的访问与控制,因此在设备驱动中没有注 册和注销字符串的操作。下面的代码给出了TW2835驱动的设备模块的加载和 卸载函数。 static struct i2c—driver tw2835一i2c—driver={ .driver={ .owner=THIS_MODULE, .name=¨TW2835 Client”, ), .attach_adapter=tw2835_aaach, .detach client=tw2835 detach, 21 武汉理工大学硕士学位论文 }; static—jnit int tw2835_init(void) { err=i2c_add_driver(&tw2835一i2c driver); ) static void exit tw2835 clean(void) { i2e_del_driver(&tw2835——i2c——driver); ) module_init(tw2835_iniO; module_exit(tw2835_clean); 上面代码中的i2e driver对应一套驱动方法,不对应于任何的物理实体。 模块加载函数tw2835一init中i2c—add—driver函数主要是向12C核心注册一个 i2c—driver,并且会引发i2c—driver结构体中的attach_adapter函数的执行。模块 卸载函数的功能相反,注销这个i2c—driver结构,并且引发i2c—driver结构体中 的detach client函数的执行。 下面代码是TW2835设备驱动结构体i2c—driver的成员函数attach_adapter 和detach client。 static int tw2835_attach(struct i2e_adapter·adap) { uint32 t mclk=27000000; stmct clk幸elk; clk=clk_get(NULL,”csi_clk”); elk_enable(elk); set_mclk_rate(&mclk); err=i2c_probe(adap,&addr_data,&tw2835_detect__client); clk_disable(clk); } static int tw2835_detach(struct i2c—client木client) { if(!tw2835_i2c_chent.adapter) 武汉理工大学硕士学位论文 return—l; err=i2c_detach__client(&tw2835_i2c_client); tw2835一i2c—client.adapter=NULL; } 在上面代码中tw2835 attach函数首先是使能12C适配器时钟,接着调用 i2e__probe函数探测和外设连接的适配器。当探测到有适配器和外设相连时, 会引发i2c probe参数tw2835 detect client函数的调用。tw2835 detach函数中 主要是注销该设备,并且回收系统资源。下面代码是tw2835 detect client的实 现。 static struct i2e—client tw2835一i2c—client={ .1lalile=”TW2835 12C dev”, .addr=TW2835一12C_ADDRESS, .driver=&tw2835一i2c—driver, }; static int tw2835_detect_client(struct i2c_adapter·adapter,int address, 缸kind) { tw2835一i2c—client.adapter=adapter; if(i2cattaeh_elient(&tw2835 i2c client)){ tw2835一c—client.adapter=NULL; } } 上面代码中结构体i2c client对应真实的物理设备TW2835。主要包括其名 字,设备从地址,以及对于的i2e driver结构体。tw2835 detect client的作用就 是将该结构体依附到其对应的物理适配器上面。 当给设备找到对应的适配器以后,就可以同12C来访问该设备了。在linux 的12C体系结构中,会调用12C总线驱动的i2e_algorithm中的关键函数 master_xfer0来产生12C访问周期需要的信号,以i2c_msg(即12C消息)为单 位。一条消息代表通过总线读写一次。 武汉理工大学硕士学位论文 图3.3是TW2835的12C写时序图,图3.4是TW2835的12C读时序图。 窘翻 。 9aveaddms. 删£ ^政 . r 弛笋№。 触 喇矗筮ldrem。 ^歧 . 抽目 触 要∞ r 可 S晰 ] 国oo固 国00固 瓣oo固 釉00圆 厂 /匡面illul 图3-3 TW2835 12C写时序 ,《-.‘I. _-—锄●I●‰ ——■_——峨—嗍 —-pa●触●I.I_'■№—_—呦_-—--●雌■●Iq呦—·叠l_-懈—-—瞰—I.._●锄 ●一i●钮—●I●氍——锄_·托—-胂——Ip^●矗●1.I_.——油___——---触●l_.—__—瞳 __-_枇 --■_I.L鲫 -—● s涨晰1]圳斌X圳国删!猷刈X国圳I圳囤∞则固删!阳■猷州棚手蚓叭X遏叭敏肌姗岬厂 I IVl I II l I’\.I./I IrI I II I /Wail_ ●_—______——___-__—·—-—_—__—-___——_-_____———·_---●___—-—_-_-———___________-___—__—·_·—_-_-—·--·.1 妇翱■翱∞●■ 图3-4 TW2835 12C读时序 由图3_4可知,写一次寄存器的值,需要向12C总线发送3次数据,分别 是页地址、页内寄存器地址以及数据。因此为了写一个寄存器,需要构造3个 12C消息。读一次寄存器的值同样需要构造3个12C消息。 当驱动可以正确的访问到TW2835内部寄存器后,首先需要配置模拟视频 输入部分,获得模拟视频信号。主要包括Page0的0XOD,0X1D,0X2D,0X3D 等寄存器,用来选择四路视频通道。 3.2.2 TW2835对视频数据的处理 图3.5是TW2835对获取的视频信号的处理过程。四路模拟CVBS信号首先会 经过AD转换器和视频解码得到数字视频信号,在通过裁剪器对图像进行预处理, 然后经过输出通道处理视频图像的显示大小,位置。最后通过内部ITU.R BT656 编码器处理得到符合YUV(4:2:2)格式的数据。需要注意配置的寄存器有: (1)配置视频处理参数。主要Page0的0x02—0x06,0x12—0x16,0x22-0x26, 0x32.0x36用来设置四路视频图像的缩小以及裁剪。 武汉理工大学硕士学位论文 (2)输出通道:配置输出通道参数。TW2835的显示通道可以选择4个实时输 入视频信号。寄存器lxA3配置了输出数据格式和输出通道。同时需要通过配置 DEC PATH系列寄存器。 所有的这些对TW2835的寄存器配置函数都会被Linux下V4L2底层实现函数 所调用。 Ⅵde北co。der恒 VIN0 ADC l’L二=== VINl VIN2 VlN3 ADC ADC ADC 三de兰coder忙l一 圈恒 decoder l L二=二二 霸-◆1一Scalerdecoder 输 出 通 道 处 理 l ITU—R BT656 Encoder O× 图3.5 TW2835对视频数据的处理 3.3视频采集模块 Linux2.6下视频采集和压缩系统中,一般都用到V4L2(Video for Linux 2) 驱动规范。V4L(Video for Linux)是Linux系统中关于开发视频设备的内核驱动中 间件,V4L2是V4L的升级版本。V4L2提供了应用程序和底层驱动之间的接口, 同时也为Linux下的视频设备的应用程序开发提供了一套API函数。根据V4L2提 供的API函数,开发者可以方便的访问以及控制视频采集设备,完成视频采集以 及其相关参数的设置129][301。 3.3.1 V4L2底层驱动 V4L2接口支持一系列的设备接口,包括视频捕捉接口、视频输出接口、视 频Overlay接口、VBI接口以及收音接121等p¨。V4L2规定这些设备驱动的主设备 号都是81,而且不同类别设备的次设备号分布在相对独立的范围内。这样就可 以通过次设备号来得知该设备的种类。在V4L2中最关键的数据结构式 video device结构体【32】。其定义如下: 武汉理工大学硕士学位论文 struct video——device { const stmct file operations木fops; struct device·dev; char name[32]; int type; 净v411’| int type2; int nunor; 净v412≮l }; fops是该视频设备具体的文件操作结构体,包括read、write、ioctl等函数, 这些操作是针对特定设备的。minor是该设备的次设备号。V4L2采用统一的接口 注册了一个设备操作接口,这个统一设备操作接口的open函数被调用后,会根据 具体的设备的次设备号找到它对应的video device结构,并且用该结构体中的 fops来代替原来统一设备操作接口,这样就可以通过具体设备的fops函数实现对 该设备的控制与访问。Linux为了实现这种机制,专门定义了一个静态数组static struct video device*video device[256],每一个特定的视频设备都会在这个数组 里面占有一项。在实现V4L2底层视频设备驱动的时候,就需要通过V4L2提供的 结构体填充到上_device 设备注册函数video register 面提到的静态数组中。 来将特定设备的 video device 从开发者的角度看,可以把V4L2底层驱动看成是一个两层结构的驱动系统。 上面一层是videodev模块,它的主要功能是向系统注册字符设备,这一层是Linux 系统已经做好的。下层可以看做是videodev的client,是视频设备驱动的具体实现。 两层驱动之间通过video device这个结构体联系起来。当应用程序调用V4L2的 API函数时,系统首先会将指针传递到videodev模块,然后videodev模块再将指针 转向具体的视频设备驱动的操作指针【33】。下面代码是本方案中V4L2底层驱动的 实现。 static struct file_operations mx21 J4l_fops=t .owner=THIS_MODULE, .open=mx27_v4l open, .release=mx27 v4l close, 武汉理工大学硕士学位论文 .read 2 mx2j|j41一read, .ioctl=mx21 JAl_ioctl, ); statie struct video—device mx27.v4l_template={ .owner=THIS_MODULE, .type2=VID_TYPE_CAPTURE, .fops=&mx21 jAl_fops, ); if(videoregister_device(&mx2互舛1 template,泞辽n?E_GRABBER, video_nr) 一-1){ video__devicerelease(&mx21 jAl_template); > 上面的代码dPmx27一v41 fops结构体是对视频采集设备的具体操作,包括有 open、read、ioetl等函数的实现。其中主要是调用TW2835驱动中的12C读写函数, 实现对TW2835的控制和访问。在mx27_v4l_openi蚕l数中还要实现对imx27的CSI 总线接口和em_M_k模块以及VPU模块的处理。video_register_devicei'球i数将设备对 应的video device结构体注册到系统。 3.3.2视频采集应用程序 Linux下应用程序使用V4L2提供的API函数采集视频图像同样需要遵循 V4L2规范[34】【351。利用V4L2的API函数采集视频图像一般会按照一个结构化的步 骤进行。 (1)打开视频设备文件 (2)获取视频设备的相关属性参数 (3)设置图像采集格式 (4)采集视频图像 (5)处理视频图像 (6)关闭视频设备 在本方案中视频采集流程如图3—6。 武汉理工大学硕士学位论文 开始 上 打开视频设备 ● l获取设备属性和设置图像参数 ◆ 内存映射初始化 T _/令. 采集一帧图像 , \零/ 关闭视频设备 ◆ 结束 图3.6视频采集流程图 (1)打开设备文件 , 下面代码中打开视频设备文件。 char v41_device[100】_’’/dev/v41/vide00”; if((cap_fd 2 open(v41_device,o RDWR,0))<O){ printf(”%s:Unable to open%s恼”, 兀肘CTION.—,v41_device); return-1; > 通过上面的代码成功的打开了视频设备文件。接下来要做的就是获取属性 和设置视频采集参数。 (2)获取设备属性和设置设备参数 打开设备文件以后,需要调用ioctl函数来设置设备属性。ioctl函数是Linux 下用来对设备进行管理的函数。它的格式如下: int ioctl(int—.fd,unsigned long int__request,...): 其中—-fd就是用户通过open函数打开设备文件时返回的文件标识符,int_request 是用户的设备的具体命令符,省略号是其他参数。V412支持的ioctl命令有几十个。 主要命令如下: 武汉理工大学硕士学位论文 VIDIOC QUERYCAP:获取设备属性。 VIDIOC EM玎垤STD:列举所支持的所有的video标准信息 VIDIOC CROPCAP:查询裁剪能力。 VDIOC S CROP:设置图片的边框 VIDIOC G CROP:获取图片的边框 VIDIOC S FMT:设置视频捕捉格式。 VIDIOC G FMT:获取当前的视频捕捉格式。 下面的代码实现了视频设备参数的设置。 tint.type=V4L2一BI厚TYPE_VIDEO_CAPTURE; tint.tint.pix.pixelformat=V4L2一PtX_FMTⅥⅣ422; crop.type=V4L2_B哩舾”IDEO_OVERLAY; ioctl(cap_fd,VIDIOC—S—FMT,&fmt)<O); ioctl(cap_fd,VIDIOC—S—CROP,&crop); memset(&fb_v412,0,sizeof(fb_v412)); ioctl(cap VIDIOC , G FBUF ,&fb y412) <0;.fd memset(&req,0,sizeof(req)); rreeqq. .ctoyupnet==VTE4SLT2__BBU町FFYEPRE__NUVMI; DEO_CAPTURE; req.memory=V4L2_MEMORY_MMAP; ioctl(cap_fd,VIDIOC_REQBUFS,&删; 上述代码中首先执行调用VIDIOC S FMT命令的ioctl函数,fmt.type说明了 这是对视频图像采集设备的设置。V4L2 PIX FMT YUV422代表采集图像的格 式是YUV4:2:2格式的,这是由TW2835芯片处理后的视频数据格式确定的。接着 是配置图像的宽度、高度等信息。我们可以对设备能够采集到得图像范围裁剪, 通过VIDIOC S CROP设置需要采集图像的边框,确定采集图像在摄像头过来的 图像中的位置。在本方案中是采用共享内存的方式来读取视频数据的,因此程 序调用了VIDIOC REQBUFS的ioctl函数,来向内存申请Treq.count个缓存,在 读取数据的时候,这些缓存会被映射到应用层空间。 (3)视频图像数据的采集 视频采集一般可以采用两种方法。第一种就是采用文件系统提供的标准函 数read函数来读取视频数据。另外一种方法就是通过共享内存的方式获取视频数 据【361。 武汉理工大学硕士学位论文 所谓内存映射的方式就是指不同的进程将同一个文件映射到它们各自的虚 拟地址空间。普通文件被映射到进程的虚拟地址空间后,进程就可以像读写内 存那样来访问该文件了,不需要调用文件系统接口函数,提高了效率。共享内 存是内存映射文件的一种特殊方式,它是指将同一块内存映射到不同的进程的 虚拟地址空间。采用共享内存不需要在内核空间和用户空间之间拷贝大量的数 据,两个进程可以读写同一块内存,效率高。本方案中采用的是共享内存的方 式来读取视频数据的。 下面代码通过共享内存的方式实现了视频数据的采集。 street v412——buffer buf; enum v412_buf_type type; for(i_0;i<TEST_BUFFER NUM;i++){ memset(&buf,0,sizeof(buf)); buf.type=V4L2_B劬巴n?E_VIDEO_CAPTURE; buf.memory=V4L2_MEMORY_MMAP; bur.index=i; ioctl(cap_fd,VIDIOC_QUERYBUF,&buO<o); } for(i=O;i<TEST_BUFFER_NUM;i++){ memset(&buf,0,sizeof(buf)); buf.type=V4L2_BI甩TYPE_VIDEO_CAPTURE; bur.memory=V4L2_MEMORY_MMAP; ioctl(cap_fd,VIDIOC_QBUF,&buO<O); , type=V4L2_BI m TYPE_VIDEO_CAPTURE; ioctl(cap_fd,VIDIOC_STREAMON,&type)<0); 上面的代码中首先是调用VIDIOC QtmRYBUF的命令来获取以申请缓存的 地址和长度,存放在cap 结构中。接着调用 VIDIOC QBUF 的命令将这些.buffers 缓存放入缓存队列。然后调用VIDIOC STREAMON的命令开始采集数据,并 且将采集到得数据存放到缓存队列中。 (4)视频图像的处理 当采集到图像数据后,需要对其进行H.264格式编码,并且通过RTP协议传 输出去。下面的代码就是对视频图像的处理。 武汉理工大学硕士学位论文 while(1){ ret=v41_get_capture_data(&v412_bu0; lock(cnc->cmdl); ret=vpu_EncStartOneFrame(handle,&enc_param); v41_pntcapture__data(&v412_buf); vbuf=(enc·>virt_bsbuf_addr+outinfo.bitstreamBuffer ··enc·->phy__bsbuf__addr); RtpSendData((unsigned char*)vbuf,outinfo.bitstreamSize+8,frame_id); break; ) return; } 在这个循环体中首先调用v41__get._eapture_datafl§数从缓存队列中读取一帧 数据,接着调用vpu』!ncStanOneFr锄e函数来对这帧图像进行H264格式的编 客户端在通舯协议接收这些数据。 码。最后调用RtpSendData函数将这帧图像数据通过RTP协议发送到客户端,在 (5).关闭视频设备 使用close函数关闭一个视频设备。下面的代码是结束视频采集函数的实 现。 v41_stop__eapturing(void) { int type=V4L2_BUE rYPE_VIDEO_CAPTURE; ioctl(cap_fd,VIDIOC_SITREAMOFF,&type); close(cap_fd); } 上面代码中首先是调用VIDIOC STREAMOFF的ioctl命令停止视频采 集,接着是关闭设备文件。 3.4视频传输模块 武汉理工大学硕士学位论文 3.4.1视频传输协议 图3—7是一个基本的网络视频监控系统模型图。在图3.7的各个网络层次中, 应用程序编程不能够实现物理层和数据链路层。网络层的作用是选择合适的路 由将打包的数据发送出去,使用的是IP协议。传输层的作用是为应用程序得进程 服务的,它为进程间的通信提供有效、可靠的服务。传输层为应用层屏蔽了通 信子网技术以及服务质量的不足,可选用的协议有传输控制协议TCP协议和用户 数据报协议UDP协议136】。传输层协议是保证视频信号传输的实时性和质量的关 键之一。 图3.7网络监控系统模型图 在视频传输的过程中,我们更看重的是实时性,而非可靠性。因网络拥塞 而延迟到达的图像不能显示,否则播放会引起视频的混乱。在传输层协议中, 主要有TCP协议和UDP协议。TCP协议即传输控制协议,它是一种可靠的连接的 传输协议,当它检测到失序丢包等现象时,会要求发送方重新发送数据,提供 流量控制、超时重发等功能【3 71。UDP协议的全称是用户数据报协议,是一种不 可靠的无连接的传输协议。相比TCP协议,用UDP协议传输视频图像,更能满足 其实时性的要求。但是由于UDP的不可靠性,无法满足视频传输的质量要求。 武汉理工大学硕士学位论文 所以IETF的多媒体工作组专门为视频和音频的网络传输制定了RTP多媒体实时 传输协议,它包括RTP(实时传输协议)和RTCP(实时传输控制协议)两个部分【3引。 在本方案中就是采用RTP协议来传输视频数据的。 RTP协议是工作在UDP协议之上的,在传输数据时将视频数据和RTP头信息 打包成RTP数据包,然后将RTP数据报包封装在UDP信息包中,最后将整个UDP 信息包通过口协议发送出去。RTP协议只是负责多媒体数据的实时传输,而RTCP 协议负责传输的可靠性以及流量、拥塞控制。 图3—8是RTP的数据包的格式。每个封装好的RTP包由头部和负载两部分组 成的,其中头部的长度是固定的,有12个字节,负载则是具体的多媒体数据f39】。 由图3.8中可以看到,RTP头部仅仅在被混合器插入的时候,才会有CSRC识 别符列表,最后面则是不定长的视频或者音频数据。其中RTP头部字节主要部分 的具体含义如下: Ol 1 2I 3 4l 5l 6I 7l 0 1 2I 3I 4I 5l 6I 7l OI 1 I 2l 3I 4l 5I 6I 7l 0l 1l 2l 3I 4I 5l 6l 7 V P1)q CC l M PT I Sequence number timestamp Syllchr0Ilization source identifier(SSRC) Contributing source identifiers(CSRC) Payload data 图3.8 RTP数据包的格式 版本(V):占有2比特空间。此域定义的是RTP的版本号。 填充(P):占有1比特空间。该位在某些加密算法,或者传输多个RTP包的时 候被用到。 扩展()():占有l比特空间。扩展位。 负载类型(PT):占有7比特空间。此域定义了具体负载的格式。 序列号(sequence number):占有16比特空间。此域表示当前的RTP包序号, 序列号的初始值是随机的,每发送一个RTP数据包以后,序列号加1,接收端可 以根据序列号来检测丢包和重建包序列。 时间戳(timestamp):占有32kL特空间。该域表示RTP数据包中第一个字 节的采样时间,为了保证它的安全性,系统在采样时间的基础上加了个随机数。 时间戳的主要目的是为了完成数据流之间的时间同步,按照时间先后顺序来播 武汉理工大学硕士学位论文 放视频或者音频数据。当一帧数据太大时,可以将它分成几个小块,这些分块 具有相同的时间戳,但是有不同的序列号,可以在接收端将具有相同时间戳的 分块重新组合这一帧较大的数据。如果RTP包是周期性产生的,那么采样时刻是 由采样时钟来确定的,而不是由系统时间确定。 RTCP协议即是实时传输控制协议,它同样也是由包头和负载两部分组成 的,但是他的负载部分不含有实际的多媒体数据。它的主要任务是辅助RTP协议 传输多媒体数据,实现传输的拥塞控制和流量控制。在用RTP协议传输数据期间, 发送方和接受方都会周期性的互相发送RTCP包,这些RTCP包里面包含了时间 戳、已发数据量、丢包数量等统计信息。发送方会根据这些有效的统计信息来 调整实际发送数据的流量f40】【411。RTCP协议也是工作在UDP协议之上的,RTCP 包被封装到UDP包中后在通过口网络协议发送出去。 根据RTCP包的头部参数可以将RTCP包分为发送报告、接受报告、源描述 项、BYB、以及APP等几种类型。在数据控制中最重要的是发送报告和接收报告 两类。接收方报告(Receiver report)是由数据接收方发送的,主要包含已经收到的 报文的最大序列号、接收到得最后一个发送方报告的时间以及延迟信息、报文 丢少数、到达时间抖动等有效信息。发送方报告(Sender Report)是由实时数据发 送方发送的,主要提供SSRC标识符、发送包数、发送字节数等信息。 3.4.2 RTP瓜TCP具体实现 要在Linux平台下实现基于RTP/RTCP协议的多媒体数据传输,可以使用一 些开源的RTP库。目前国内外一些组织、个人以及实验室提供的开源的库主要包 括GNUCCRTPl521、librtpt541、jrtplib以及oRTP等。本方案中采用的是oRTP库, 通过使用oRTP库提供的API函数来实现视频数据的实时传输。 首先需要将oRTP库安装到宿主机以供开发。下面是oRTP库的安装过程。 (1)首先是下载oRTP协议栈,目前最新的版本是ortp一0.16.1.tar.gz. #tar-zvxf ortp一0.1 6.1.tar.gz . (2)解压协议栈,执行下面的操作: 拌./configure #make #make instal】 武汉理工大学硕士学位论文 首先通过执行configure文件生成makefile文件,然后调用make命令,最后 将库文件安装在安装在文件夹/usr/local/lib下。 (3)为oRTP提供的动态链接库建立共享。 将库文件放在LINUX动态链接库存放的目录下,比如/lib,/usr/lib以及 /etc/ld.SO.conf文件内所列的一系列目录。然后执行下面的命令: #1dconfig 经过上面的几个步骤以后,就已经建立好了RTP库了,在应用程序中就可以 直接调用oRTP库提供的API函数来进行视频数据的传输了。 3.4.3视频数据传输 图3.9是服务器端RTP发送数据的程序流程图。服务器端的发送过程是:首 先建立一个新的会话,然后配置该会话参数,接着设置接收方m,最后就可以发 送视频数据了,如果数据块过大,可以将数据包分割成几个小块,然后在发送 出去。下面是服务器端RTP发送数据的具体过程。 , (1)在使用oRTP库提供的API前,必须先调用ortp init函数来对oRTP库进行初 始化。如果想在应用程序中采用调度模式,必须调用ortp scheduler init函数来初 始化oRTP库得调度器。 ortp_init0; ortp_scheduler_init0; (2)在开始传输数据之前,传送和接受双方都必须建立一个会话。如果这个 会话能够发送数据,那么一个SSRC同步源将被建立。 m_Session_send=rtp_session_new(RTP_SESSION SENDONLY); 函数将这个会话设置为阻塞模.mode 的参数用来表示是发送数据还是接受数据,.sesion rtp new RTP SESSION SENDONLY表示这个会话只是用来发送数据的。 (3)接下来要配置RTP会话的调度模式,如果这个RTP会话处于调度模式下, 这意味着能够通过session set select0函数来阻塞这个会话,直到这个会话接受或 者发送数据的时间到了,这个时间是是传递给相关函数的时间戳来确定的。 rtp_session set scheduling__mode(m_Session_send,1); 这句话表示将这个会话设置在调度模式下。 接下来是调用rtp session set blocking 式,这个函数定义Trtp session recv with ts以及 武汉理工大学硕士学位论文 却session send with ts这两个函数的行为。当调用np session recv with ts这个 函数以后,在数据包到来之前,函数会阻塞。当调用np session send with ts函 数后,在发送数据之前,函数也会阻塞。这个时间是有传递给这两个函数的时 间戳参数来确定的。 rtp_session set blocking_mode(re_Session_send,1); (4)当建立好新的会话以及配置会话的调度模式以后就可以发送数据了,首 先要配置好数据发送的目标地址以及端口号。 rtp_session set remoteaddr(m_Session_send,remotelp,5060); 上面remoteIp是一个32位的P地址,5060是端口号。 接着要配置RTP数据包中负载的类型,调用的是 rtp_session_set_payloa,Ltypei函数,设置接收数据包的负责类型以及发送的数据 包的负载类型。如果实际的数据包中的负载类型和期待的类型不一样,会发送 一"个payload type ch锄ged的信号。 .rtp_session_set__payload_type(m_Session_send,34); (5)做好上面的步骤以后就可以调用rtp send with ts 和.session np session reCv with ts这两个函数来接发数据了。 在客户端接收数据和解码显示数据的速度不一样,可能会导致数据的丢失, 所以采用多线程编程技术和缓存技术,主线程通过R,IP接收视频数据,辅助线程 解码显示视频数据【421。主线程和辅助线程共同维护一个缓存队列,当接收到数 据以后,主线程将数据存入缓存队列,辅助线程从缓存队列中读取视频数据并 解码显示。在本方案中主线程和辅助线程对缓存队列的互斥访问通过linux下的 一个临界区CRITICAL SECTION结构实现的。 武汉理工大学硕士学位论文 图3-9服务器端RTP发送数据流程图 图3.10是客户端RTP接收数据主线程流程图。客户端程序主线程的流程 是:首先建立新的会话,配置好会话的一些参数以后,建立辅助线程。接着 就可以接收数据,进入临界区,并且将数据放入缓存队列,接着退出临界区, 开始接收下一帧数据。 . 图3.11是客户端RTP接收数据的辅助流程图。辅助线程的流程是:进入 临界区,读取一帧数据,退出临界区后判断数据是否有效,如果有效则调用 FFmepg_q2程组的库函数解码数据,然后调用SDL库函数播放视频数据。接 着解码播放下一帧视频数据。 37 武汉理工大学硕士学位论文 图3.10客户端RTP接收数据主线程流程图 武汉理工大学硕士学位论文 图3.11客户端RTP接收数据的辅助流程图 3.5 WEB控制模块 在本方案中实现了通过远程WEB控制监控行为的机制,实际上就是在下位 机上建立了一个小型的嵌入式WEB服务器。在任意一个授权IP的PC机上面,通 过WEB浏览器就可以控制远程下位机的监控行为。 3.5.1嵌入式web服务器 嵌入式的webJ]艮务器一般是由核心部分和可裁剪部分两个部分组成。HrrP 请求解析器和模块分析器构成了嵌入式webJ]艮务器的核心部分。HTTP请求解析 器的主要任务是解析由客户端发送过来的HTTP请求报文,从中获取相关信息: 模块分析器的主要任务是根据配置信息来调度其他功能模块。功能模块又可以 分为用户功能模块和系统功能模块两种。但系统功能模块被配置里后,服务器 接收到的请求就由该模块来处理。系统功能模块由以下几个部分组成:针对静 态网页请求的文件系统访问模块、针对动态网页请求的CGI处理模块以及针对用 户控制作用的赋值处理模划4311441。 39 武汉理工大学硕士学位论文 现在使用的嵌入式web serber有lighttpd、HTTPD、THTTPD和BOA等。在这 几个服务器中,HTTPD服务器的功能最弱,它不支持认证也不支持CGI,无法完 成于客户端之间的交互,不能完成系统的控制功能。THl]限D服务器和BOA服务 器都支持认证和CGI功能。BOA服务器的功能比较齐全,但是在嵌入式系统下, 很多功能是不需要的,内存使用量比较大。而lighttpd和apache贝JJ属于重量级的服 务器,成熟稳定,但是它的体积非常大,只适合在非常复杂嵌入式系统下使用 【4511461。在本方案中只需要通过WEB服务器来实现简单的控制功能,采用的是 THTTPD服务器。 THTTPD是一个非常简单的轻量级的web server,但是他提供对HTTP/1.1和简 单的CGI的支持。同时它支持Linux、Solaris、Sunos等平台,因为其资源占用小 的缘故,它的速度非常快,和主流的web server差不多。 3.5.2下位机THTTPD服务器 在下位机上建立THTl'PD服务器就是将THTTPD移植到下位机上运行。主要 的任务是移植THTTPD程序、配置THTTPD服务器、测试TH霸阳D服务器。具体 的过程如下: (1)将下载好的源码解压 #tar-zvxf thttpd一2.25b.tar.gz (2)交叉编译thttpd 首先进,,,thttpd一2.25b目录,执行./configure生成Makefile。 #cd thttpd-2.25b 撑./configure 然后打开Makefile文件将编译器gee改成交叉编译器,具体的就是在Makefile 文件中找到: CC=gee 改成: CC=ann-926ej s—linux-gee 然后执行make命令。 #make (3)安装于配置 40 武汉理工大学硕十学位论文 首先将交叉编译得到的thttpdZ.进制可执行文件拷贝到开发板的,usr/sbill/目 录下。接着将位于./eontib/redhat—rpm下的thttpd.conf拷贝到开发板的/etc目录 下。 然后在开发板上为thttpd建立一个独立的用户:httpd。并且在开发板上的 /home/httpd/下新建html目录。在新建的/home/httpd/html目录下新建cgi-bin!;I 录。 (4)测试 把编写好的网页ipcamconfig.html拷至O/home/httpd/html下,然后在客户 端的浏览器地址栏输入http://192.168.0.251/ipcamconfig.html就可以看到网页 了。当然前提为开发板和PC机处于统一局域网内,192.168.0.251是开发板的 D。 目前的THTTPD服务器还不能执行CGI程序,要想支持CGI功能,还必 须修改thttpd.conf文件。 首先找到chr00t这一行,将其屏蔽。屏蔽choot是为了运行动态编译的 CGI。 #ehroot 接着要声明CGI程序的目录。 cgipat=-/cgi-bin/幸 其中以dir=/home/httpd/html为根目录。这样该服务器就可以支持CGI程 序了。 3.5.3控制网页和CGI程序 在本方案中,远程用户通过客户端WEB输入下位机Ⅲ地址后,或弹出一个 ipcamconfig.html得网页,用户可以填写网页中的数据后提交,服务器可以做出 反应。这些功能是由CGI,即公用网关接口来完成的【4。71。 实现WWW的基础是HTTP协议,即超文本传输协议,它是遵循C/S模型的。 一个服务器可以接受网络中的客户来提供相应的服务。在服务器端,它每次连 接只处理一个请求,当守护进程监听到来自于客户的请求后,一个为用户提供 连接服务的子进程在服务器端被建立。服务器会根据客户端的不同要求做出不 同的反应,有的是直接返回一个HTML文件,有的是通过CGI来调用外部应用程 41 武汉理工大学硕士学位论文 序,并且返回程序执行的结果。可见服务器正是通过CGI程序来实现与用户的交 互的。 CGI规定的是一个接口协议标准,WEB服务器可以用它来实现调用其他可执 行程序(CGI程序)。wEB服务器与WEB浏览器之间的交互就是通过CGI程序来实 现的。CGI程序对WEB浏览器发送过来的消息进行处理,然后把处理的结果返还 给WEB浏览器。CGI程序一般完成的处理有:对WEB网页提交的表单进行处理、 查询数据库以及与传统应用系统集成的实现等。我们可以用多种语言来编写CGI 程序,Lff,女DShell脚本语言、Perl、Pascal、C语言等【4引。在本方案中CGI程序是由 C语言来写的。 外部的CGI程序与服务器之间进行通信主用通过三种方式:标准输入、环境 变量以及命令行参数。在HTML脚本中的<FORM>标签的METHOD属性决定了 具体的使用方法。 环境变量是由服务器里的守护进程设置的,是在创建子进程来运行外部CGI 程序的时候被设置的。环境变量是全局变量,系统中运行的进程都可以访问到 它。下面是CGI程序设计中常用到得几个环境变量。 REMOTE.HOST:WEB浏览器的域名与机器名。 SCR口T-M蝴E:是该CG玮呈序的名称。 HTTP—REFERER:网页的URL。 REQUEST-METHOD:WEBJEJ艮务器传递数据给CGI程序时共有有GET和 POST两种方法。当采用GET方法时,CGI程序只能通过环境变量从服务器那里 得到数据;当采用POST方法时,CGI程序可以通过环境变量和标准输入两种方 法来获得数据,可以看出通过POST方法可以传递更多的信息。 CONTENT.TYPE:CGI程序获得的数据的MIME类型。 CONTENT.LENGTH:CGI程序获得的数据字符数。 QUERY-STRING:当采用POST方法时,这个变量存放传递给CGI程序的数 据。 在嵌入式开发中命令行参数使用的比较少,仅仅是在HTML中存在ISINDEX 查询的情况下被使用。 CGI程序的标准输入对应着服务器的标准输出,服务器的标准输入对应着 CGI程序的标准输出。HTML脚本中的<FORM>标签的METHOD属性决定了具体 的输入方法。 42 武汉理工大学硕士学位论文 当‘'METHOD=GET”时,通常通过命令来向CGI程序来传递表单编码信息。 一通过QUERy STRING这个环境变量来传递表单编码信息。CGI程序在处理客 户端的请求的时候,首先会对QUERy STRING这个环境变量中的字符串进行分 析。如果仅仅是需要从服务器上面获取数据,一般采用GET方法,但是请求的字 符串的长度不能超过1024个字节,否则就只能用POST方法。GET方法发送请求 信息是通过u也后面的参数来传递的。这些参数放在环境变量QUERY_STRING 田【49】 二t: o 当‘'METHOD=POST”时,表示浏览器传递给服务器的数据时通过一个填写 的表单来实现的,并且传递的数据超过1024个字节的时候是必须使用POST方法 的。采用POST方法时,CGI程序从其标准输入STDIN获取数据,数据的长度是 存放在环境变量GONTENT LENGTH里面的。 在本方案中ipc锄con她.htIIll网页主要向视频服务器提交以下的几个控制信 息: (1)主机的P地址,服务器将数据发送到指定的主机上面。 (2)视频标准,即让服务器按照该标准来对视频编码,比女I]H264、H263、 MPEG4等。 (3)分辨率。采集图像的分辨率,有PAL(720*576),NTSC(720"480)等。 (4)比特率。设置RTP传输数据的比特率。 (5)运动监测。即是否实现视频监控的运动监测功能。 (6)开始监测。一般是设置好上述的一些参数以后就可以监测。 (7)停止监测。 (8)获取当前信息。获得当前采集的图像分辨率,RTP传输速率等信息。 在ipcamconfig.html实现了3个表单,分别实现开始、停止和获取信息的功能。 3个表单的脚本如下: </form> <form name:=¨form l”action=”/egi-bin/start.cgi”method=”POST”> <input type=”submit¨value-=¨start’’> </form> </form> <form name='。form2”aetion="/cgi-bin/stop.cgi”method=”post’’> <input type=”submit”value=”stop”> </form> 武汉理工大学硕士学位论文 </form> <form name=”form3¨action=”/cgi—bin/getinfo.cgi”method=”post”> <input type=”submit¨value=”Get Current Info¨> </form> 首先看表单forml,input type=”submit”表示用户采用submit的输入形式。服 务器采用POST的方法和CGI程序通信。当用户提交以后,服务器执行存放在 /egi-bin lj录下的start.cgi程序。表单form2、form3同理。 下面是“开始”命令相应的start.c百的具体实现。首先是在宿主机上编辑文件 start.c文件。 int mainO { typedef struct { long mtype; char mtext[1 50]; }msg_info;. req_method=getenv(”REQUEST_METHOD”); input=getcgidata(stdin,req_method); printf(”Content·type:text/htmlknkn”); msgid=msgget(1000,0777IIPC_CREAT); buf.mtype=START; buf.mtext[0】_1; ret=msgsnd(msgid,&bur,1 5,IPC_NOWAIT); printf(¨<br><a href-\”。/ipcamconfig.htmlV’>please click here to go back”); ’ 将上面的代码交叉编译后得到可执行文件start.cgi,并将其拷92至aJ/cgi.bill目 录下,这样当客户点击开始按键后,服务器就会执行该代码,启动采集工作。 上面的代码完成了两个工作:处理消息队列和返回用户网页。 req__method=getenv(”REQUEST_METHOD¨); input=getcgidata(stdin,req__method); 这两句就是获得表单的数据并且保存在变量input中。 武汉理工大学硕士学位论文 接着就是向消息队列(KEY=1000,TYPE=100)中发送START消息。最后是 返回用户网页。 那么在客户端的采集程序中,同样需要等待消息队列中的消息,当得到以 后就立即开始执行采集程序。 45 武汉理工人学硕士学位论文 第4章系统调试与运行 在前面章节中详细的介绍了基于IMX27的网络视频监控系统的设计。下面 简要的介绍系统的集成测试。 4.1运行环境 本方案主要运用于远程室内监控,在测试的过程中,服务器端和监控端分 别在不同的楼宇里面。 下位机:基于imx27的视频采集服务器,采集的图像分辨率:720*576。 上位机:CPU p43.0,内存DDR400 512M。 上位机和下位机虽然处于不同楼宇里面,但是通过网线连接在同一个局域 网内,上位机通过WEB浏览器启动下位机开始视频采集,下位机将采集来的 图像进行处理然后传输到远程PC机,PC机客户端解码播放获得的监控视频。 4.2测试内容 (1)WEB控制 首先是测试WEB服务器的功能,当做PC机器用WEB浏览器输入开发板 P地址后,弹出ipcamconfig.html网页。设置相关参数,点击开始,服务器开 始采集数据。图4—1是打开ipcamconfig.html网页。 武汉理工大学硕士学位论文 ……¨t……■女目 …ng……a……Ⅲ…n 。雠 ” ¨r-,¨ -,-…一 口3Ⅱ,日口,■●一 :|¨ Ⅱ.,,r1 -·.-t— nj v …,_ 一-一*7一 r日●。一 }fⅥr rw 、’ 一E r^ z ~ M1_’】_“, v+, — m聃 lt 图4-1 ipcamcomqgaxtml网页 (2)当开始采集数据以后,要测试的是视频采集芯片。11W2835 的处理。主要是测试对图像的裁剪与伸缩,四路图像的输入等。{ 是TW2835的overlay模式下的数据采集,也就是采集到视频数据 务器的液晶显示屏上面播放。图4_2是播放实物图。 圈4-2下位机实时播放图 武汉理工大学硕士学位论文 图4.2中,只有左上角有图像, 是因为只有对应的通道接通了摄像头,当 把另外的几个通道都接上摄像头时, 会在相应的部分也显示图像。 (3)RTP传输测试。 在RTP传输的过程中,要测试两个内容,一个是客户端接受到得帧数,另 外一个是显示的帧数。客户端的接收线程和显示线程共同维护一个队列。当前 接收到得一帧图像的时间戳如果大于对队里面最早收到的那帧图像的时间戳, 说明这帧图像时延迟了的,应该丢弃。如果收到图像时,对列已满,则这帧图 像也要丢弃。表4.1是服务器端发送10000帧图片,客户端对接收到得帧数和 显示出的帧数的一个统计。 通过表4.1中的数据显示,客户端显示几乎能到达25帧/秒左右,丢帧率 非常低,整个传输、显示达到了预期的设想。 (4)客户端播放测试 通过WEB启动服务器后,服务器就会向设定的PC机发送视频数据,在 PC机打开客户端播放程序就可以播放监视视频了。图4.3是在不同楼宇里的客 户端上运行的监控界面。 表4.1 RTP传输测试表 服务器发送帧数 客户端接 客户端显示 收帧数 帧数 时间(秒) 1 10000 9999 9996 400 2 10000 9969 9960 400 3 10000 9991 9962 400 4 10000 9995 9963 400 5 10000 9993 9993 400 6 10000 9995 9991 400 每秒显示图 片 24.99 24.90 24.9l 24.91 24.99 24.96 4.3测试结果 综合整个测试过程,整个系统运行良好,实现了稳定的视频采集,较高的 数据传输率,客户端播放稳定。服务器能够正确的处理来着于客户端的命令, 启动或者停止视频采集,发送视频数据。客户端能够对接收到得数据解码显示, 画面实时、清晰、流畅。整个系统实现了远程监控的功能。 武汉理工大学硕士学位论文 图4-3客户端播放效果图 武汉理工大学硕士学位论文 图4.2中,只有左上角有图像, 是因为只有对应的通道接通了摄像头,当 把另外的几个通道都接上摄像头时, 会在相应的部分也显示图像。 (3)RTP传输测试。 在RTP传输的过程中,要测试两个内容,一个是客户端接受到得帧数,另 外一个是显示的帧数。客户端的接收线程和显示线程共同维护一个队列。当前 接收到得一帧图像的时间戳如果大于对队里面最早收到的那帧图像的时间戳, 说明这帧图像时延迟了的,应该丢弃。如果收到图像时,对列已满,则这帧图 像也要丢弃。表4.1是服务器端发送10000帧图片,客户端对接收到得帧数和 显示出的帧数的一个统计。 通过表4.1中的数据显示,客户端显示几乎能到达25帧/秒左右,丢帧率 非常低,整个传输、显示达到了预期的设想。 (4)客户端播放测试 通过WEB启动服务器后,服务器就会向设定的PC机发送视频数据,在 PC机打开客户端播放程序就可以播放监视视频了。图4.3是在不同楼宇里的客 户端上运行的监控界面。 表4.1 RTP传输测试表 服务器发送帧数 客户端接 客户端显示 收帧数 帧数 时间(秒) 1 10000 9999 9996 400 2 10000 9969 9960 400 3 10000 9991 9962 400 4 10000 9995 9963 400 5 10000 9993 9993 400 6 10000 9995 9991 400 每秒显示图 片 24.99 24.90 24.9l 24.91 24.99 24.96 4.3测试结果 综合整个测试过程,整个系统运行良好,实现了稳定的视频采集,较高的 数据传输率,客户端播放稳定。服务器能够正确的处理来着于客户端的命令, 启动或者停止视频采集,发送视频数据。客户端能够对接收到得数据解码显示, 画面实时、清晰、流畅。整个系统实现了远程监控的功能。 武汉理工大学硕士学位论文 第5章结束语 在本次的课题研究过程中,完成了远程视频监控系统的方案设计,,整个 系统能够正常、稳定的工作,达到了预期的目标。 本课题主要特色如下: 1.本课题采用了内嵌硬件编解码模块的IMX27芯片作为主处理芯片,为软 件减轻了很大的压力,减少了软件处理时间,提高了系统性能。同时该ARM 芯片内嵌快速网口(FEC),节省了硬件外围空间。 在视频采集方面,采用了四路视频处理芯片TW2835,能够同时监控4个 不同地方的视频信息。并且能够对采集得到的视频图像进行运动检测等功能。 2.采用了RTP/RTCP协议。在视频传输中采用了专门用于多媒体传输的 RTP/RTCP传输协议,保障了视频传输的实时性与可靠性。 3.在实现远程WEB控制的部分,采用THTTPD协议栈。通过THTTPD协 议栈能够实现微型的嵌入式WEB服务器,实现客户端与服务器之间的互动。 用户在任意一台组网的PC机器上通过WEB网页就可以控制服务器。 经过验证,该系统能够稳定的完成远程监控功能,用户能够通过WEB网 页来控制服务器的工作,并且通过客户端播放软件能够实时、流畅的播放采集 到的视频信息。 同时由于时间紧迫,本方案还存在在一些不足的地方: 1.目前该系统只能在局域网内实现WEB控制,不能实现严格意义上的远程 控制,需要改进的目标是能够通过广域网控制视频监控功能。 2.目前服务器与客户机只能是一对一的通讯方式,不能满足一对多的通讯。 即同一时段只能有一个客户端获取视频监控的信息。需要改进的目标是能够实 现多个用户同时得到实时的视频监控信息。 3.在客户端播放软件中只是实现了实时视频播放功能,没有实现视频的存 储,查询等功能。需要改进的目标是用户能够获取最近一段时间中任意时刻的 视频信息。同时能够完成单幅图像与多幅图像之间的切换。 4.该系统只是实现了图像的监控,没有实现声音同步传输。改进目标是在 监控图像的同时得到声音数据。 50 武汉理丁大学硕士学位论文 致谢 在论文结束之际,我要感谢在我研究生学习过程中指导和帮助过我的老师 和同学们。正是在老师和同学们的帮助下,我才顺利的完成了本课题的设计。 本论文是在我的导师张维华教授的精心指导下完成的。张老师深厚的理论 素养、丰富的实践经验以及严谨的治学态度都深深地熏陶和启迪着我。在我读 研期闻,张老师不仅在学业上给予我精心指导,而且也教我许多做人做事的道理。 在此感谢张老师对我无私的帮助,并祝愿饱身体健康、工作顺利。 感谢实验室的王玉松同学,我们一起度过了紧张难忘的研究生生活,他在 学习和思想上给了我许多的启发与帮助,愿他在以后的人生旅途中越来越辉煌. 最后衷心的感谢我的家人,正是他们的支持与鼓励帮助我顺利完成学业, 我会以自己最大的热情回报社会,以报父母的养育之恩. 郑捷航 20:1.0年5月 武汉理工大学硕士学位论文 参考文献 【1】李小平等.多媒体通信技术[M].北京:北京航空航天大学出版社,2004. 【2]Desurmont Xavier,Lienard Bruno,Meessen Jerome,etc.Real-time optimizations for integrated smart network camera[C].Proceedings ofSPIE-The International Society for Optical Engineering,2009:85—92. 【3]Shaojie Wang Shared Malik Reynald0 ET.Modeling and Integration of Peripheral Devices in Embeded Systems[C].In:Proceedings ofthe Design Automation and Test in Conference and Exhibition IEEE,2003,9(3):602—605. 【4】Hischke,M.Kaiser,S,Collar.Unattender Surveillance and Monitoring System[J].SPIE,2008, 420):322—330. 【5】M.Bramberger,R.P,Pflugfelder,.A.1VIaier,etc.A smart canlel"a for traffic surveillance.In Proceedings of the First Workshop Oll Intel-ligent Solutions in Embedded System4C]. 2009:153.164. 【6】W.Wrol£B.Ozer,T.Lv.Smart cameras as embedded systems[C].IEEE computer,September, 2006,35(9):48-53. 【7】陈耀武,伍鹏,汪乐字.基于流媒体技术的网络化嵌入式视频监控系统[J】.工程设计学 报,2004,1(2):57—61. 【8】刘伟峰,唐晓英.基于以太网的嵌入式视频监控系统[J】.电视技术,2007,6:79.81. 【9】陈俊宏.Embedded Linux嵌入式系统原理与实现[M]_匕京:中国铁道出版社,2004 【10】刘洁瑜,王黎明,钱培贤等.基于MJPEG2000嵌入式网络视频采集压缩系统的设计与实现 [J].微电子学与计算机,2009,21(12):168,173 【11】钟庆,藏礼荣,宋彦.基于DsP的脱机远程视频监控终端[J】.计算工程,2004,30(17):186.189 【12】默罕莫德·默森,夏玮玮,沈连丰.嵌入式视频监控服务器硬件的设计与实现[J】.低压电器, 2004,12:25.28 【13】季星,林俊超,宋飞.ARM嵌入式应用系统开发典型实例【M】.北京:中国电力出版 社,2005. 【14】王学龙.嵌入式LiInl)【系统设计与应用[M】.北京:清华大学出版社,2009. 【15】Dapeng Wu,Wenwu Zhu.Streaming Video OV01"the Intemet[C]:Approaches and Directions.IEEE Transactions on circuits and Systems for Video Technology, 2009,l 1(3):65-66. 【16】陈文智等.嵌入式系统开发原理与实践[M】.北京:清华大学出版社,2005. 【17】Scongsoo Hong.Embedded linux outlook in the PostPC industry[M].Object-Oriented ‘ Real-Time Distributed ComPuting,2008. 【1 8】KarimYsghmour.Building Embedded Linux Systems[M].0’Reilly,2009. 【19】Robert love.Linux Kernel Development(2砸Edition)[M].Novell Press.2005. 52 武汉理工大学硕士学位论文 [20】杜华.Linux编程技术详解[M】.北京:人民邮电出版社,2008. 【21】孙纪坤,张小全.嵌入式Unix系统开发技术详解[M】.北京:人民邮电出版社,2006. 【22】李善平,刘文峰,王焕龙等.Linux与嵌入式系统[M】,北京:清华大学出版社,2008. 【23】刘峰编.视频图像编码技术及国际标准[M].北京:北京邮电学院出版社,2005. 【24】张春田,苏育挺,张静.数字图像压缩编码[M].北京:清华大学出版社,2006. 【25】孙天泽,袁文菊,孙海峰著.嵌入式设计及Linux驱动开发指南一基于ARM9处理器[M]. 北京:电子业出版社,2005. 【26】林小飞.基于ARM嵌入式Linux应用开发与实例教程【M].北京:清华大学出版社,2007 【27】宋宝华.Linux设备驱动开发详解[M】.北京:人民邮电出版社,2008. 【28】李亚峰.ARM嵌入式Linux设备驱动实例开发[M].北京:中国电力出版社.2008 【29】Alan Cox,Vide04Linux Programming[EB/OL],alan@redhat.corn,2009 【30】Net source,Vide04Linux Kernel API Reference[EB/OL],Version 0.1,April,1999 【3 1】王剑非等.基于Linux操作系统的视频采集卡驱动程序设计【J】.微计算机信息,2007, (2):102-104 【32】郭剑等.嵌入式Linux的图像采集与显示【J】.现代电子技术,2008(7):129.131. 【33】王培珍等.基于ARM9的嵌入式Linux图像采集系统设计【J】.智能控制监测技术与应 用,2007,36(19):89-92. · [34】Alan Cox.Vide04Linux Programming[EB/OL].alan@redhat.com.2000 【35】Michael H Schimek&Bill Dirks.Video for Linux Two API Specification. 【36】M Heroine.Real-time optimizations for integrated SITlR.rt network camera[C】Preceding of SPIE-The International Society for Optical Enginc煳'ing 2007 85-92. 【37】李明等.嵌入式TCP/IP协议栈的研究与开发【J】.计算机工程与应用,2009:1 18.121 [38]马小骏等.RTP协议的研究与实现[J】.计算机工程与应用,2009(9):121。123 【39】刘浩等.基于RTP/RTCP协议的P视频系统设计与实现【J】.计算机应用研究. 2002,10:140—143. 【40】Gary R.Wrihgt,W.Richard Stevens.TCP/IP Illustrated[EB/OL].2002,2(4):33.35. 【4l】任延珍,喻占武,胡瑞敏.基于RTP/RTCP协议的实时数据传输与同步控制策略[J】.计算 机工程与应用,2007,No.10:P144-147. [42]王卫华,陈卫东,顾岳.Linux环境下的实时视频采集[J】.电子技术,2006,12(4):P42--44. 【43】T.Berners-Lee,R.Fielding,H.Frystyk.Request for Comments:1945,I-Iytmrtext Transfer Protocol—HTTP/1.0.Network Working Group,May 1996. 【44】R.Fielding,J.Gettys,J.C.Mogul etc.Request for Comments:2616,HypertextTransfer Protocol —HTYP/I.1.Network Working Group,June 1 999. 【45】张永强,赵永勇,嵌入式远程视频采集系统的设计与实现【J】,现代电子技术;2009年第4 期:2_4. 【46】Ramakrishna A.16-bit embedded Web serve[J]r.Sensors for Industry Conference.USA. 2007.187.193 53 武汉理工大学硕士学位论文 【47】Sonawaane Y.D,Patil P.M.,Sonawane N.D.,Remote Control ofprocess parameters Using Embeded Web Technology[C].Advanced Computing and Communications,International conference,Dec 2006:638-639. 【48】郝福珍.嵌入式web server的研究与实现【J】.计算机工程与设计.2007 27(16):2992-2995. 【49】何轩等.基于以太网的嵌入式web服务器的设计与实现[J】.微电子学与计算机,2008 22(12):156—159. 武汉理工大学硕士学位论文 附录:攻读硕士学位期间发表的论文 【1】郑捷航,张维华.基于IMX27的视频监控系统的设计.中国科技论文在 线:2009 12-973 基于ARM的网络视频监控系统设计 作者: 学位授予单位: 郑捷航 武汉理工大学 本文读者也读过(4条) 1. 蒋鑫 基于ARM的远程视频监控节点的设计[学位论文]2010 2. 刘军民 基于ARM的嵌入式网络视频监控系统设计[学位论文]2009 3. 张先翔 基于ARM的嵌入式远程视频监控系统的设计[学位论文]2010 4. 李小琦 基于ARM的嵌入式网络视频监控系统研究[学位论文]2010 本文链接:http://d.g.wanfangdata.com.cn/Thesis_Y1680761.aspx

Top_arrow
回到顶部
EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高进,我们会尽快处理。