You are on page 1of 24

摘要

随着电子技术和多媒体及网络技术的快速发展,视频监控系统正向嵌入式,数字化, 网络化方向发展。嵌入式视频监控系统利用大规模集成电路和网络的科技成果。实现体积 小,性能稳定,通讯便利的监控设备。 本项目提出了在 ARM 微处理器平台上移植嵌入式 Linux 操作系统,并完成视频采集、 压缩、控制等任务。系统硬件设备选择采用实验室配备的 ARM9 微处理器 S3C2410 作为主 处理器,利用 USB 接口的摄像头作为视频采集设备。为降低产品成本,在此基础上,借 Linux 下的开源软件,构建了整个嵌入式视频监控系统。 嵌入式系统 ARM9 Linux V4L 视频采集

Abstract

With the rapid development of the electronic technology, multimedia technology and network technology, video surveillance system is going to the embedded, digital, networked direction. Taking full advantage of LSI and networks of scientific and technological achievements, the embedded video surveillance system achieves delicate volume, stable performance, facilitates the communication of the surveillance equipment. The project is in arm microprocessor platform, and porting embedded linux system in it. It completes video capturing, compression, transmission and control tasks. The hard devices select

the ARM9 (S3C2410) as the main processor in the system; and the USB camera as the device of video capture. In order to reduce the cost of the product, Based on the architecture and with the open source software in linux, the whole embedded video surveillance system is implemented.

Keywords:

Video Surveillance Embedded system ARM9 Linux video for linux

1 绪论 4 1.1 项目背景 4 1.2 视频监控系统的发展 4 1.3 论文的主要研究工作 5 2 视频监控系统方案设计 5 2.1
1
绪论
4
1.1
项目背景
4
1.2
视频监控系统的发展
4
1.3
论文的主要研究工作
5
2
视频监控系统方案设计
5
2.1
系统硬件设计方案
5
2.2
软件设计方案
6
3
软件开发环境的建立
7
2.1
嵌入式 LINUX 操作系统
8
2.2
建立交叉编译环境
9
2.3
BootLoader 的移植
9
3.4
Linux 内核编译与移植
11
3.5
文件系统的移植
12
4
设备驱动程序开发简介
13
4.1
Linux 的驱动程序层次结构
13
4.2 字符型设备驱动程序
4.3Linux 下驱动程序的实现
4.4USB 摄像头选择以及驱动设计
................................................................................................
14
15
16
5
Linux 下视频采集
17
5.1
视频采集模块的设计
17
5.2
基于 v4l 的编程
17
5.3
在 LCD 上显示视频图像
19
6
视频网络传输模块研究与实现
20
6.1
TCP / IP 协议简介
21
6.2
基于 webserver 的视频网络传输模块
22
6.3
播放视频流
23

1 绪论

1.1 项目背景

随着电子技术和多媒体技术的飞速发展,利用嵌入式设备进行数字处理传送成为可 能。嵌入式设备具有体积小、功耗低、数字化、安装方便、价格低廉等优点,因此基于嵌入式 的视频采集和监控成为了当前嵌入式应用开发领域的一个热门课题。相比较传统的视频采 集监控系统,它具有高可靠性、组网方便、可远程监控等优点,因而更适用于工业控制、银 行、政府部门的安防系统中。 本文通过建立一个适用于家庭安保、学校等应用场合的嵌入式网络视频监控系统,在 实验室环境下针对网络视频监控系统的各项关键技术进行研究,包括嵌入式 Linux 技术、 视频采集、视频图像网络化传输和运动目标检测等。论文工作也将为网络视频监控系统在 其它领域的应用起到一定的作用。如环境与安保集中监控系统、移动监控系统等领域以及 智能小区、银行、商场等场所。 同时为了更好的学习 Linux,熟悉 Linux 移植中的难点、要点。所以选择以 Linux 作为 项目所需的操作系统。通过此项目,可以更深入的了解 Linux,熟悉驱动程序的编写等。

1.2 视频监控系统的发展

随着图像(视频)处理、网络通信和微电子技术的快速发展,视频以其直观、方便和内容

丰富等特点,日益受人们青睐而在多应用领域。智能视频监控算机

域一个新兴的应用方向和备的前沿课题。随网络技术和数字视频技术的飞速发展,

监控技术正向着数字化、智能化、网络化的方向不断前进。智能视频监控系统的需主要

自那些对安求敏感的场合,如银行、停车场、无人值守等。比如通过传统的多

媒体监控系统虽然也可实现无人值守获取变的电气参数,并

反映变运行的其它方情况,如防压器、开关等设备表面等。

,对于异常及各类故障缺乏足够事后分析手段,所以要实现站综全面

动化理,需要一个功能完备的远程智能视频监控系统。

智能监控技术包括运动目标检测、跟踪、目标分类和行为理解等方。其中,处于整个

系统层的运动目标检测与跟踪是种后续处理如目标分类、行为理解的基础和

关键,在导航目标捕获等研究方向上具有举足轻重的作用,而更广

的研究和探讨

视频监控系统大致经历了以下阶段监控系统、第二代数字化视频监

控系统、第三代网络视频监控系统阶段。其中,第三代视频监控系统以网络为依托

以数字视频的压缩、传输、存储和播放为核,以智能实用的图像分析为特发了视频

监控行业的技术革命到了学术、产业使用部门的高度重视。

1.3 论文的主要研究工作

论文基于中科学技术大学软件学研究的工程实项目,在深入研究了嵌入式 Linux 操作系统、视频数的采集、压缩与流媒体实时传输技术的基础上,将上述三者结合起设计了一基于嵌入式 Linux 操作系统的网络视频监控系统。论文的研究工作主 要集中在以下个方:

(1) 系统软硬件平台的;

(2)

Linux 系统的裁剪以及移植

(3)

USB 摄像头的选择以及 Linux 平台上驱动程序的开发;

(4)

基于 Vidoo4Linux 的视频采集程序的研究与实现;

(5)

基于 webserver 的视频网络传输模块研究与实现

(6) 客户端视频接模块的选择与设计实现

2 视频监控系统方案设计

2.1 系统硬件设计方案

系统在布置为远程视频监测、现场视频采集、本LCD 显示个部

远程监测运行于控制中,它实时接和显示图像数,采用PC 可,关键 要能入以网。 现场视频采集采用 ov511 的网摄像头,处理器采用基于三星 s3C2410 处理器的 ARM 开发系统,这里我们用了博创 UP-NET ARM2410-S 该试多的设接口,特别是开发平台上的 10/l00M 适应网络接口和 USB 接口,特适合本项目的 使用环境。 ARM CPU SDRAM FLASH :RS-232 (COM1)USB HOST 接口,适应以网接口,TFTLCD 接口,一个触摸屏接口。通过 RS-232 接口接到宿;通过在 USB 接口上接一个 USB 口的摄像头,将采集到的 视频图像数输入缓冲区中,在本LCD 上显示,或是通过以网传到远。 系统硬件平台如图 2-1 所示

监控终端 USB摄像 数据压缩 头 数据传输层 SDRAM 控制台 S3C2410X NAND SRAM Flash 电源及复位电 Jtag接口 路
监控终端
USB摄像
数据压缩
数据传输层
SDRAM
控制台
S3C2410X
NAND
SRAM
Flash
电源及复位电
Jtag接口
远程监测 端 运行于控制中 心 ,它实时接 收 和显示图像数 据 ,采用 普 通 PC 即 可,关键 要能 连
存储设备
存储设备
  • 户终端

2-1 系统硬件平台结构图

2.2 软件设计方案

通过对嵌入式操作系统 Linux 体系结构的分析,结合 ARM 处理器及其外围设备的的 特性,本系统中将软件的体系结构:内核空间和用户空间。内核空间:Linux 内核以

及视频采集、以及相关协议的移植。操作系统内核的主要功能是管理任务、任务序、提 、系统时钟管理以及实现硬件抽象层和视频编内核的通信;为了使系统具有网 络传输功能,必须用到嵌入式操作系统中网络协议如 TCP/IP 协议。应用程序的接口API 实现,API 的实现包括个部:一部API 作为库来实现与应用程序接,一部 SOCKET 中实现。 用户空间应用层软件,当 USB 摄像头驱动加载之后,视频采集模块采集摄像头 的视频数然后通过网络传送到远程客户端。如图 2-2 所示为系统的整体软件设计构 图。

远程网络监控

远程网络监控 端 以 太 网 网络视频流 服 务模块 视频采集模块 USB 摄像头驱动程序 Bootloader

远程网络监控 端 以 太 网 网络视频流 服 务模块 视频采集模块 USB 摄像头驱动程序 Bootloader

网络视频流务模块

远程网络监控 端 以 太 网 网络视频流 服 务模块 视频采集模块 USB 摄像头驱动程序 Bootloader

视频采集模块

远程网络监控 端 以 太 网 网络视频流 服 务模块 视频采集模块 USB 摄像头驱动程序 Bootloader

USB 摄像头驱动程序

远程网络监控 端 以 太 网 网络视频流 服 务模块 视频采集模块 USB 摄像头驱动程序 Bootloader

Bootloader

2-2 软件系统

3 软件开发环境的建立

基于嵌入式 Linux 开发环境一般由目标系统硬件开发和装有 Linux 桌面版的主机平 PC 组成。Linux 上操作系统采用 Redhat9.0 本。目标系统硬件开发运行嵌入 式 Linux 操作系统、用系统应用程序等,而主平台用进行嵌入式操作系统内核编译,

文件系统的制作和系统应用程序开发和调试等。方通过口、并口或者网口等建立

接。

2.1 嵌入式 LINUX 操作系统

Linux 类似UNIX是免费的,源代码开放的,符合 POSIX 的操作系统。 近几年 Linux 在嵌入式领域获得了飞速发展,选择 Linux 作为嵌入式操作系统的嵌入式系 统占很大比Linux 所以有能在嵌入式系统场上取得如此速的发展,与自身的优 点有着分割的关系。 Linux 作为嵌入式操作系统的优Linux 正在嵌入式开发领域稳发展,是由于其自身具有非常适合于作为嵌入式操作 系优点,主要现在: 使用成本低 几乎所有的商用操作系Microsoft 公司的 Windows 需要为一个拷贝 支付用。但是 Limix 是免费软件,遵守 GPL 的规定,可以免费获得拷贝 Linux 样遵循 GPL 规定的 CC++Java 等等一系的软件工具开发包,同时可以大的 降低开发成本。点优势是商用操作系统无法的。 源代码公Linux 可以随意地置不需要任证或商家的合作关系,任何人修改并在 Linux 下发行。Linux Unix 熟悉的完的开发工具,几乎所有的 Unix 系统的应用 Linux gccg++等也开源的,可以易得 到,并在不断与成熟。 支持硬件平台 Linux 有了一个大的支持者群体,其中人都编写驱动程序和其它的更程序 并且免费的通过 Intenet 网络进行发。现在 Linux 已经被移植到多硬件平台,支持包括 x86AlphaSparcMipspowerPCARM 和时间限制的研究与开发项目是很吸引力的,型可以在标平台上开发然后移植 到具体的硬件上,快了软件与硬件的开发过程。 大的网络功能 Linux 操作系统最突出的网络部,基本上所有的网络协议和网络接口可以在

Linux 到,Linux 内核比标UNIX 效地处理网络协议,系统的网络吞 吐性能非常好,什么 Linux 在网络务器场上占据越来越份额的一个 因。 微内核模块化体系结构 Linux 操作系统本的微内核体系结构相当简,网络和文件系统以模块于微 内核的上层,驱动程序和其它部件可在运行时作为可加载模块编译到或者是添加到内核, 为构定制的可嵌入系统提了高模块化的构件方使添加部件非常。 系统小一个功能完备的 Linux 内核要IMB 。而 Linux 微内核只占用其中小一部 ,包括和所有核的操作系统功能在内,用系统的 100K

2.2 建立交叉编译环境

交叉编译嵌入式开发过程中的一项要技术,主要特器中行的程序代码不 是在本编译成,而是由另一台器编译成。采用交叉编译的主要因在于,多数嵌 入式目标系统能提供足够编译过程使用,因而好将编译工程移到 PC 中进 行。 当前交叉编译器有多种版本,本设计中使2.95.3 arm-linux-gcc。 在 网 上 下 载 该 版 本 的 交 叉 编 译 器 包 : arm-linux-gcc2.95.3.tar.gz , , 将 arm-linux- gcc2.95.3.tar.gz tar zxv arm-linux- gcc2.95.3.tar.gz 然后/etc/bash.rc 文件,修改环境变量。以编译内核应用程序 arm-linux-的前定交叉编译器。

  • 2.3 BootLoader

一个型的嵌入式应用系统固态存储设备的空间分配示图。 Bootloader 系统一电所行的一个程序,在操作系统内核应用程序运行 前运行。通过这段小程序,可以初始化硬件设备、建立内存空间图,而将系统 的软硬件环境到一个合适的状态,为最终调用操作系统内核应用程序备好正

确的环境。 Bootloader 启动参数 内核 文件系统
确的环境。
Bootloader
启动参数
内核
文件系统

2-1bootloader 及系统各个部所处的层次 Bootloader 是依于硬件而实现的,特别是在嵌入式系统中建立一个通用的 Bootloader 几乎是不可能的,不同的体系构需求的 Bootloader 是不同的。了体系结构, Bootloader 于具体的嵌入式板级设备的配。也就是,对于同的嵌入式即使基于相同的 CPU 构建,运行在其中一块电路上的 Bootloader运行在一块电路开发上,因此我们必须对其进行移植,是我们开发的。 通常都是有的 Bootloader 进行移植工作,如 Vivi UBoot 等。 VIVi ARMg BootLoaderVIVi mizi 发的 BootLoader,适用于 ARM9 处理器。VIVi 两种工作模式:加载模式和下模式。 加载模式可以在一间后(个时可更)Linux 内核,VIVi 默 认模式。在下模式下,VIVi 为用一个行接口,通过接口可以使VIVi 的一些命。 在 VIVi 代码的头文件/include 中,s3c2440.h 文件定处理器的一存器,Platform/smdk2440.h 了与开发相关的源配置参数,我们只需要修改这些文 件可以配目标数,如引导参数、理内存映等。VIVi 的嵌入式移植 过程主要有以下:

(l)mizi 公司网站VIVi 源文件,进入 vivi 录执vi 修改 Makefile 文件。

(2)修改三

LINIUXINCLUDEDIR:为交叉编译器的 include 文件CROSSCOMPILE:为交叉编译器的可行文件的路ARMGCCLIBS:为交叉编译器的 lib (3)修改 arch/s3c2440/smdk.c,主要是修改 nandflash

(4)修改内核动时使用的初始数。

(5)#makemenucofig VIVi(6)#make vivi 编译 VIVi 源文件。可以获得编译成功的 VIVi 进制代码我们这里采用的是博创公已经编译好的适合于博创试vivi 进制

文件。将 Vivi 通过 JTAG 写在 Nandflash Ox00 处,完成了 Vivi 的编译和移植。

  • 3.4 Linux 内核编译与移植

在对内核移植前,需要系统硬件源对 Linux 内核进行配裁剪,以便在实 现功能的前提下小内核,利用嵌入式系统有源。在宿Linux 系统终 端下,进入内核源代码的目,输入 makemenucoonfig 可以对内核进行配,如图所示。

文件。将 Vivi 通过 JTAG 烧 写在 Nandflash 的 地 址 Ox00 处, 即 完成了 Vivi 的编译和移植。

本系统中主要需要对一下数进行配:处理器结构、网络功能、设备驱动、可行文件格 式等。内核配可通过以下对内核进行编译:

(1)makeclean清除前编译成的文件。

(2)makedep:建立内核文件之间系和关系。

(3)makezlmage最终所需要的像文件。

运行以上三个命令之后,即可在二 /arch/arm/boot 成所需要的 zImage 映像文件。 之后利用终端仿真程序 minicom Bootloader 引导程序通过可以Linux 内核像 移植到目标系统flash 中了,儿我用的是 tftp 工具: tftp flash kernel zImage

3.5 文件系统的移植

在嵌入式系统中,一采用 NANDFlash 作为代码和数据存储器。引导程序、内核以及 需要保存的数据等都要放在 Flash 中,而操作系统一般都需要在存储器上建立文件系统 能对存储器进行操作,因此需要在 Flash 上建立文件系统以嵌入式操作系统和实的需要。

Linux ,系统对立的文件系统不是用设备标示符来存取(比如驱动器编驱 动器名称),而是连接成为一个型结构。Linux 在安装的文件系统时,它安装到定 的安装目而合并到一的文件系统上。Linux 的一个要特支持种 不同的文件系统,文件系统将放在系统硬上的文件和目用可以理解的统一式提 户不必考虑文件系统的或底理设备的特性。在嵌入式系统中, RAMFSJFFS2CRAMFS CRAMFS 针对 Linux2.4 内核之后本所设计的一种新型文件系统,也压缩和 格式的。它主要优点将文件数以压缩存储,在需要运行的时进行解压缩。 于它存储的文件压缩的格式,所以文件系统能直接在 Flash 上运行。虽然这样 可以节约Flash ,但是文件系运行需要将大量的数据拷RAM 中,耗了 RAM 空间CRAMFS 的移植过程如下: image:在 kernel/script/cramfs image mkcramfs。建立一个目,将需要放到文件系统的文件制到个目。如果目录名 /mnt image root.cramfs为: ./mkcramfs /mnt root.cramfs 然后内核支持 CRAMFS:在 kemel 录执make menuconfig 内核需, 选中 MTD(MemoryTechnologyDeviee)设备,选择直接编译到内核中这样就不insmod 了。选中其中的相关选项,可以据自己使情况定制,多选中一些只是使启变得,内核大一点,什么处。如果 CRAMFS 文件系统不是作为系统的 文 件 系 统 , 要 mtdblock0 的 主 设 备 31 30 修 改 在 文 件 kernel/include/linux/mtd/mtd.h 系统动以可以移植 CRAMFS 文件系统了,写如下:

tftp flash root root.cramfs

此本系统开发环境己经建立起

4 设备驱动程序开发简介

4.1 Linux 的驱动程序层次结构

在嵌入式系统中,操作系统介于应用程序与硬件之间的一个系统软件,其作用为用统一的 API 接口。操作系统所对的硬件设备种类非常多,同型家 的设备具有各自不同的特点,因此,要支持设备就必须供这种设备的控制代码然后加载进内核,内核使设备。内核的度来,驱动程序一个设备的 代表。当内核需要与个设备交时,就找设备的驱动程序,而通过标的接口用驱动程序的相应数,控制设备,而内核并需要知道驱动程序如工作,也需要 了解设备的细节,设备的细节驱动程序掌握。驱动程序可以动地加载,内核需设备的驱动程序。 设备驱动程序一需要完成以下功能:

(1)对设备初始化和

(2)据从内核传送到硬件和硬件据;

(3)应用程序传送设备文件的数送应用程序的据;

(4)检测和处理设备出现的错误

Linux 操作系统下有三类主要设备文件型:块设备、字符设备和网络设备。用进 程正通过设备文件与硬件个设备文件有其文件(cb)字符 设备块设备。另外每个文件2 个设备一个主设备,标驱动程序;第 二是从设备,标使用同一个设备驱动程序的同硬件设备。设备文件的主设备必 须与设备驱动程序在登记申请的设备否则进程将无法访问驱动程序。 Linux 的设备驱动程序可个主要部(1) 动配仞始化子程序,负责检测所要驱动的硬件设备在和能工 作。如果设备正个设备及其他必需的(如中DMA )进行申请初 始化。驱动程序初始化时被调用一次。 (2) 务于 IO 的子程序,又称为驱动程序的上程序是由

系统用的结果。程序在行时,系统仍认与进行用的进程于同一个进程, 只是由成了核具有进行此系统用的用程序的运行环境,因而可 以在其中用与进程运行环境相关的数。 (3) 断服务子程序,又称为驱动程序的下。在 Linux 操作系统中,并不是直接 量表用设备驱动程序的中断服务子程序,而是由 Linux 系统硬件中系统用中断服务子程序。中可以在任一个进程运行时产,因而在中断服务子 程序被调用时,于任进程的状态,也就不用任与进程运行环境有关的 数。因为设备驱动程序一般支持同一型的若干设备,所以一在系统用中断服务子 程序时,都带有一个多个数,以一标识请求服务的设备。

4.2 字符型设备驱动程序

在系统内部,I/O 设备的存取通过设备驱动程序提的一组定的入口点进行,组入口点在驱动程序初始化时向系统进行登记,以便在系统适当的时用。一般来, 字符型设备驱动程序能如下个入口点: (1) open 入口点:开设备IO 操作,对字符特设备进行打丌操作,用 设备的 open 入口点。open 子程序必须对将要进行的 IO 操作要的备工作,如清 除缓冲区等。如果设备的,同一时能有一个程序访问此设备,open 子程 序必须示设备的状态型: int (*open)(struct innod*,struct file* ) (2)close 入口点:关一个设备,当最后一次使用设备结close 子程序。设备必须设备可使用。型: int (*release)(struct innod*,struct file* ) (3)read 入口点:设备,对于有缓冲区的 IO 操作,一般从缓冲罩读设备数

 

ssize_t(*read)(struet flle*,char*,size_st,loff_t*):

(4)write 入口点:向设备写数,对于有缓冲区的 IO 操作,一缓冲写入数

型:ssize_t(*write)(struet flle*,const char*,size_st,loff_t*):

(5)ioctl 入口点:之外的操作。型:

int (*ioctl)(struct inode*,struct file*,unsighed int,unsighed long)

4.3Linux 下驱动程序的实现

Linux 对一个硬件设备的驱动有两种方式:一种是直接加载到内核代码中,动内核 时驱动此硬件设备;种是以模块方式,编译成一个.o 文件。模块(module)在内 核空间运行的程序,实目标对文件,接,立运行,但是可以 装到系统中作为内核的一部运行,而可以动态扩充内核的功能。模块主要的用处 就是实现设备驱动程序,当应用程序需要它时加载进内核空间运行。通一个硬件 的驱动程序就是一个驱动模块。 对于任一个硬件设备,它在/dev 面存在一个对应的逻辑设备点,的设备文件。通过 mknod 建立的,其中定了主设备和次设备。主设 备设备,一对应定的驱动程序次设备用于区分不性, 同的使用方同的位置同的操作。个设备是从/proc/devices 文件中获 得的,所以一般是有驱动程序在内核中,有设备点在目中。图 4-1 了驱动程 序与系统之间的关系。

应用程序 Open read write 操作 设备文件 Mknod 通过主次设备号相连 返回主设备号 驱动模块 通过模块的 read writ 操作 硬件 Insmod
应用程序
Open read write 操作
设备文件
Mknod 通过主次设备号相连
返回主设备号
驱动模块
通过模块的 read writ 操作
硬件
Insmod 向系统注册

/etc/modules.conf 文件

内核
内核

4-1 驱动程序与系统的关系

4.4USB 摄像头选择以及驱动设计

目前比较流行的摄像头基于 ov511 芯片和 zc301 芯片的,已有很多zc301 芯片 的开发文之类ov511 可能比较陈旧,可资料不是很多,我们摄像头的选择于实验室配的开发——三星 s3c2410 的开发,选择网ov511 摄像头。 摄像头于视频设备,在 Linux 内核中,Video for Linux(V4L)关于视频设备的驱 动标个标为应用程序定了一系的接口数,内核、驱动和应用程序都是依个标准来进行交流。本系统所使用的 USB 摄像头正基于准来编写驱动和应用程 序的。 Linux 内核是依据设备操作设备文件的,在内核中,摄像头对应的设备文件/dev/video0,主设备81,次设备号根摄像头数目定,本系统中使用一个摄 像头,所以可以通过 mknod /dev/video0 C 81 0 点。如下图 4-2 摄像头驱动的实现

用户进程 系统调用 文件操作接口 接收缓冲区 | 发送缓冲 区 终端服务程序 摄像头
用户进程
系统调用
文件操作接口
接收缓冲区 | 发送缓冲
终端服务程序
摄像头

4-2 摄像头驱动的实现

5 Linux

  • 5.1 视频采集模块的设计

视频采集模块的任务是从 USB 摄像头设备中视频,并将获取的视频数压缩成一定格式保。它是后图像处理,视频监测的基础。 Linux 系统中的视频采集子系统 Video4Linux 为视频应用程序提了一统一的

API,视频应用程序通过标的系统可操作各种不同的视频捕获设备。Video4Linux

文件系统视频设备文件,应用程序通过操作视频设备文件实现对视频设备的 访问。在嵌入式 Linux 的内核定制和编译阶段已经加入了对 V4L 模块以及 OV511 设备 的支持,运行 Linux 下的视频图像采集程序,可以通过 V4L 的编程接口(API)OV5n 设备中获取图像Linux 下与 Video4Linux 相关设备及用所示

设备名称

Minor range

功能

/dev/video

0-63

视频接口

/dev/radio

64-127

AM/FM 频接口

/dev/vtx

193-224

文字电视广

/dev/vbi

224-239

VBI

这里主要针对设备文件/dev/video 进行视频的程序设计。将一个 usb hub 接到 usb host cat/proc/devices video capture device 81 ls -l/dev video0 0。为摄像头建立设备 mknod /dev/video0 c 81 0V4L 模块的视频采集接口设备为/dev/video,而 USB 摄像头加载后生 /dev/v4l/video0 V4L 使 In -s/dev/v4l/video0 /dev/video0 V4L 模块的默认设备 video 理设备 video0 建立接。采集程序接 口并扫描需要的数

  • 5.2 基于 v4l 的编程

5.2.1Video4linux

Video4linux 支持的数结构及其用1video_capability

包含设备的基本信息(设备名称、支持的最大最小分辨率、信号源信息等) 包含的分量: •name[32] //设备名称 •maxwidth maxheightminwidthminheight •Channels //源个数 •type //是否能 capture,彩色是黑白,是否能裁剪等等。VID_TYPE_CAPTURE 具体实现数如下: Int camere_get_capability(camera_device*vd){

if(ioctl(vdfdVIDIOCGCAP&(vdcapability))<0){

Permr(“camer_get_cability:”):

 

Return -1;

}

 

Return

0; }

2video_picture

video-picnire 中信,成功图像的性,包括视频图像的色度、对比

等。 Int camere_get_picture(camere_device*vd){

if(ioetl(vdfdVIDIOCGPICT&(vdPicture))<0){

Perror(“camera _get_picture:”) Return -1;

} Return 0} (3) video-picture VIDIOCGPICT

VdPicture.colour=65535;

if(ioctl(vdfdVIDIOCGPICT&(vdpicture))<0){

Perror(“camere_get_pIcture:”):

Return -1;} (4) 初始化 channel。必先得到 vdc ability 中的信。实现过程如下:

for(i=0 :I <vdcapability.channels: i++) {

Vdchannel[i].channel=i:

if(ioetl(vdfdVIDIOCGCHAN&(vdchannel[i]))<0){

Perror(“camera_get_channel:”):

Return -1;}

5.2.2 视频数

视频采集的实现。完成设备初始化工作后,就可以对视频图行采集了。通常有两 视频采集方式:种是通过 read()直接另外通过 mmap()存映射读read mmap ()通过设备文件到内中,过了内核缓 冲区。通常最快的磁盘访问还的内访问,所以 mmap ()方式速了 I/O 访问另外,系用使得程之映射同一文件实现共享内存,各程可以像访问普通 对文件进行访问访问需要使针而用文件操作数,提高了进 程访问。因为 mmap()方式具有以上优点,所以在程序实现中采用内存映方式, mmap ()方式。利用 mmap ()方式对视频进行采集的流程如下:

首先,使用 ioctl 系统用的 VIDIOCSFBUF 获得摄像头存储缓冲区的之后初始video_mbuf,修改 video_mmap 中的设重新图像信,如直及 辨率显示格式等。为了防缓冲区的内容与有用信息叠干扰,在初始 化之前可以先memset(&(vd->videombuf)0sizeof(vd->videombuf))清零缓冲区。 使 vd->map=(unsigned char*)mmap(0 vd->mbuf.size PROT_READ| PROT_WRITEMAP—SHAREDvd->fdff_t offset)使设备内容到内区,其中一个数为共享的起,一设为 0,表示由系分配;第二个参数映射到 用进程空间的字数,它从被映文件开头 offset 个字节丌始;第三共享访问权(PROT_READ()PROT_WRITE(可写)PROT_EXEC()) MAP_SHARED MAP_PRIVATE;第五个参数为设备描述符。 mmap()成功用后返回系统实分配的起始地址。 存映方式下正进行视频ioctl 系统用的 VIDIOCMCAPTURE 若函数成功用,VIDIOCSYNC 图像截耿已经成功,表明一像的截取己完成,便丌始下一像数据的截取,并将当前截耿的 帧号按缓冲数的模1

5.3 LCD 上显示视频图像

USB 摄像头驱动需要编写一个对视频流采集的应用程序可以了。

嵌入式系统开发特宿上编写应用程序,使用交叉编译器进行编译成在目标平台的可行文件。宿与目标通信采用打印终端的方式进行交叉调试成功后移植到目平台。

首先打开视频设备在系对应设备文件/dev/video0。在初始化里面

完成,其fd = open ("/dev/video0", O_ RDWR); fd 设备后返回的文件描述符 (错误返回1)。以后的系用函数就可使用它来对设备文件行操作了。接着,利 ioct1 ( fd, VIDIOCGCAP, & vid_caps)struct video capability 数成功返回这些内核空间拷贝到用程序空间 vid_caps 各成分量中。用 ioctl(fd, VIDIOCGPICT, & vid_tic)摄像头缓冲voideo_picture 程序中可以改变这些。完成以上初始化设备工作可以对视频图像了。在 LCD 上的显示如图所示

据 嵌入式系统开发特 征 , 先 在 宿 主 机 上编写应用程序, 再 使 用交叉编译器进行编译 链 接 ,

6 视频网络传输模块研究与实现

要实现监控现场,了完成视频采集的编程,需要视频图像数通过网络传输 出,因此需要在完成视频采集的基础上建立网络务器,实现客户端务器之间的 数通信。本系统视频的网络传输基于 TCP 协议实现,前嵌入式作为视频务 器负责视频采集并建立好 TCP 务器,等客户端;客户端好一系初始化工

,主动务器,到应建立接接压缩视频数并实时显示,同时可以

的要进行实时定时保图像或者视频文件。

6.1 TCPIP 协议简介

TCPIP 协议针对 NI NJT-发的体系结构和协议标广泛地应用于组建网络中虽不是国获得的标TCPIP 传输层有个并的协议:TCP 协议和 UDP 协议。其中 TCP 是面向接的, 而 UDP 是面向无接的。它都是建立在 IP 协议上。TCP 应用程序的务与 UDP 是不同的。

(1)

TCP 协议是面接,客户程序要与务程序建立一个能通过接传输 数,并在结接。

(2)可靠性

TCP 协议提了可靠性,发送的数据都需要获得一个对方的确认。如果确认TCP 发数

(3)有序

TCP 个发送的字配一个序这样可以保对方到数据后重 新组装,并别收到的重复的数

(4)流控

TCP 了数的流控,TCP 总是告知对方自己一次能接大字数。这就是 TCP (window),即当前接收冲区的可用大小,以保送方不会造成接收方的 缓冲出。TCP 口大小随着接而动改变的。

(5)全双工

一个 TCP 是全双工方式的,应用程序可以在一个接上发送和接TCP 必须记录发送和接的数流的状态

务器

Socket() Bind() Listen() 阻塞,等待连接 Accept() 请求数据 Recv() 应答数据 Send()
Socket()
Bind()
Listen()
阻塞,等待连接
Accept()
请求数据
Recv()
应答数据
Send()
  • Close()

客户端 Socket() connect() send() recv() Recv()
客户端
Socket()
connect()
send()
recv()
Recv()

6-1 TCP 接过程

6.2 基于 webserver 的视频网络传输模块

Webserver HTTP Server,它是HTTP HTTP 是架构在 TCP/IP 协议上的应用协议,其目的方便和速对分布式协同工作的媒 体信系统的访问HTTP 协议通过统一源定Universal Resource LocationURL)来 位分布式的媒体信URL 通过通信协议+网络字符串来一标位置Linux 系统通过提供套接字socket)来行网络编程的。通webserver 进行网络 传输时及到的接口操作数主要有:socket()数,主要功能是创型的口并返回套接口描述符;bind()数,主要功能是使套接口与 IP 地址和端口号定; connect()数,主要功能与远端服务器建立listen()数,主要功能socket 捆绑需要监该端口,以便对到求加以处理accept()数主要功能受连列里,并返回一个socket 描述符,来 供这新连使用。需要注意务器并不是通过监客户连接并通信,而 生一个新的套接口与客通信。例如 webserver 80 口监,当有客户80

口发出时,务器将接求且由服务器进程出子进程和接口 (由 accept()返回客户连接并通信。 将采集格式为 YUV420P 视频图像数压缩成 JPEG 格式,并当客户端接 时,通过子进程向客户端发送 JPEG 图像数

if((size=(yuv420p_to_jpeg(&imagebmp,imageptr,640,480,20)))<0)

{

printf("Error:write jpeg error!");

} if(!fork()) { if(revbuf[5]==' ') send(nsockfd, imagebmp, size, 0);

}

这样,当系运行,通过设PC IP 地址(与系IP 地址在同一网段内), 在 PC IE 浏览器内输入以下 IP 地址:http://192.168.0.115:81/,将看到像格式JPEG 的图。通过,可以更图像。

6.3 播放视频流

了播放实时视频,可以通在目板的 ARM Linux 系统中移植一个视频务器的 应 用程 序实现 。 Webcam 是 一 个 比 常 用 的 的 视频应 用 程 序 , 通 webcam_server Linux 版本:webcam_server-0.50.tar.gz,它是基于 GNU 架构之下的,完 全免,源放。解./configure,生成 Makefile 文件。修改当前目src 下 的 Makefile CC /usr/local/arm/3.4.3/bin/arm-linux-gcc make webcam_server 行文件,把此用程序加2410 开发可以使用了。如果远端客 户端 Windows 操作系统,下Active webcam 客户端,并安装。设PC IP 地址 IP Active webcam选择 Tools->Create Web Page settings对视频浏览的相参数置。 具体设为:Video Device 选中 Network IP CameraPreview Frame Rate8 framesper secCamera ModelActive WebCam HTTP ServerIP Adress or URL192.168.0.115(即

IP 地址);Port8888。整个置完后,就可以搜索,找到后,就能 在相PC 上动显示摄像头采集的图像信,如图 1 所示,清晰,图像采大 小为 320×240。点击记录能将采集到的视频.AWLive 的文件格式保C:\Program Files\Active WebCam\Gallery Active WebCam Video Record,双文件能行自播放。 以下是效果图:

发 板 的 IP 地址); Port : 8888 。整个 设 置完后,就可以搜索 摄 像 头 ,找到 摄