姓名:王国栋 学号:19020100289
【嵌牛导读】近 随着通信技术和网络技术的迅猛发展,通过网络远程实时监控重要场所已倍受人们关注,网络摄像机在此背景下产生,并成为人们关注的焦点。网络摄像机是一种结合传统摄像机与网络技术所产生的新一代摄像机,它可以将影像通过网络传至地球另一端,且远端的浏览者不需用任何专业软件,只要标准的网络浏览器(如"Microsoft IE或Netscape)即可监视其影像。网络摄像机要将高清晰度的实时视频信息通过互联网传送到监控终端,因其信息量巨大,所以必须压缩。通常人们采用DSP与MPEG-4算法相结合的方案来实现,不仅编程工作量大,而且产品的成本高。网络摄像机采用专用的MPEG-4压缩芯片、以嵌入式Linux作为操作系统,不仅开发便捷、成本低廉,而且实时性好,适用范围广。
【嵌牛鼻子】网络摄像机
【嵌牛提问】网络摄像机的原理与构成
【嵌牛正文】
1. 视频采集
视频采集模块是嵌入式网络摄像机的核心模块之一。它通过嵌入式Linux操作系统调度V4L(video4linux)和影像设备驱动程序来完成视频捕获。V4L是Linux影像系统与嵌入式影像的基础,是Linux kernel里支持影像设备的一组APIs,配合适当的视频采集卡与视频采集卡驱动程序,V4L可以实现影像采集、AM/FM无线广播、影像CODEC、频道切换等功能。目前,V4L主要应用在影像串流系统与嵌入式影像系统里,其应用范围相当广泛,例如:远程教学、远程医疗、视频会议、视频监控、可视电话等。V4L为2层式架构,最上层为V4L驱动程序,最下层则是影像设备驱动程序。
在Linux操作系统中,外部设备都作为设备文件来处理,因此,对外部设备的操作就转变成对设备文件的操作。视频设备文件位于/dev/目录下,一般情况下为video0。当摄像机通过USB接口连接到视频采集终端后,在程序中调用V4L APIs对设备文件video0的读操作即可实现摄像头视频数据采集。其主要过程如下:
1) 打开设备文件: int v4l_open(char *dev, v4l_device *vd){}打开影像源的设备文件;
2) 初始化picture: int v4l_get_picture(v4l_device *vd){} 获取输入的影像信息;
3) 初始化channel:int v4l_get_channels(v4l_device *vd){} 获取每个channel的信息;
4) 对channel设置norm:int v4l_set_norm(v4l_device *vd, int norm){} 对所有的channel设置norm;
5) 设备地址映射:v4l_mmap_init(v4l_device *vd){} 返回存放图像数据的地址;
6) 初始化mmap缓冲区: int v4l_grab_init(v4l_device *vd, int width, int height){};
7) 视频捕获同步: int v4l_grab_sync(v4l_device *vd){};
8) 视频捕获: int device_grab_frame(){}。
通过以上操作,即可将摄像机视频数据采集到内存。采集到内存的视频数据既可采用文件的形式保存,也可将其压缩后通过网络发布到Internet。本设计采用后一种处理方法,即:将采集的视频数据经MJPEG压缩,生成视频数据流并发布到Internet。
2. 视频压缩
由于摄像机采集到的视频数据信息量较大,如果直接将其处理成视频,将会给视频处理和网络数据传输带来很大的负担。因此,本设计采用高性能ARM9处理器对采集到的数据进行MJPEG压缩。
JPEG(Joint Photographic Experts Group)—联合图像专家组的简称,它的主要目标是研究具有连续色调图像(包括灰度和彩色图像)的压缩算法,是MJPEG的基础。JPEG算法被确定为静态数字图像压缩的国际标准,不仅适用于静止图像压缩,而且适用于电视图像序列的帧内图像压缩。由于JPEG压缩采用的是全彩影像标准,其主要处理过程包括:色彩模型转换、离散余弦—DCT变换、重排DCT结果、量化、编码等。
MJPEG是Motion JPEG的缩写,即动态JPEG。它将动画播放与JPEG结合,按照25帧/秒的速度使用JPEG算法压缩视频信号,完成动态视频的压缩。
4 Web服务器设计
在资源有限的嵌入式设备中可以使用的轻量级Web Server有:httpd、thttpd、boa等。本设计选用开源的、支持CGI的Boa Web Server,其主要移植过程如下:
(1)到www.boa.org下载最新软件包并解压到相关目录。
(2)在目录boa/src下的defines.h文件顶部设置默认的SERVER_ROOT路径。
(3)选择交叉编译工具。在boa目录下使用 ./configure --host=i686-pc-
Linux-gnu --target=arm-Linux 完成对boa的配置。
(4)执行make编译boa后即在src/目录下生成可执行文件boa。
(5)对boa.conf文件进行配置。主要完成对boa运行的端口号、Server 根目录、log files、html文件、cgi文件目录及可读写的temp目录的属性的设置。