基于Linux 的网络视频监控
系统的设计
蔡 琴 成都工业学院电气与电子信息工程系 成都 610031
【文章摘要】
介绍了一个基于嵌入式Linux 的网络视频监控系统的设计与实现,阐述了嵌入式服务器软硬件部分的设计思路与体系架构,探讨了视频采集、视频压缩编码和网络通信模块的设计。
【关键词】
Linux ;Video4Linux ;JPEG ;网络通信
0 引言
随着网络技术和计算机技术的飞速发展,嵌入式网络摄像机的视频监控无处不在, 监控设备具有体积小巧、性能稳定、通讯便利等优点。 嵌人式Web 服务器远程视频监控就是通过一个嵌人式芯片, 利用嵌人式实时操作系统和T CP/ IP 协议栈构造一个专用Web 服务器, 把摄像机送来的视频信号数字化并压缩, 再通过内部总线送到W eb 服务器。本文介绍了运用视频压缩技术、嵌入式技术、网络技术的一种基于Lunix 的嵌入式网络视频监控系统的设计。
1 设计思想
本系统设计思想是以嵌入式linux 系统和嵌入式控制器S3C2440 为核心平台, 在这个平台上建立WEB 服务器和视频服务器,利用TCP/IP 协议技术实现网络通信,把USB 数字摄像头采集到的图像,进行压缩,然后通过网络传输到远程计算机客户端显示出来,从而实现对远端场景的监控。
1.1 监控系统的硬件构成
本系统的硬件设计是采用开发板Mini2440,该平台采用Samsung 公司的处理器S3C2440, SDRAM 内存在板64M, 时钟频率高达100MHZ,集成了256MB 的NAND Flash 和2M 的Nor Flash,,1 个100M 的以太网RJ-45 接口, 3 个串行口, 1 个USB Host,1 个USB slave,1 个SD 卡存储接口。摄像头实现在监控现场的图象采集,采用中星微ZC301P 摄像头。
1.2 监控系统的软件整体方案构成
我们可以使用嵌入式Linix 作为开发平台, 内核是2.6.32.2,C++ 语言比C 语一言更加强大, 应用广泛且能进行底层操作, 因此我们选择Linux 下的C++ 作为系统开发工具。
嵌入式系统软件平台的构建主要工作有:1.)嵌入式操作系统内核的裁剪与移植;2.)BOOTLOADER 的移植;3.)根文件系统的制作与移植;4.)文件系统的移植和制作。
网络远程视频监控系统软件结构采用了典型的客户机—服务器模型, 分为两层: 第一层是结合了用户界面与业务逻辑客户机系统; 第二层是通过网络结合了数据服务器。这种C/S 结构客户机直接向服务器提出访问请求, 服务器根据请求结果做出相应的反应, 并将结果返回给客户机, 由于服务端从一开机就启动服务程序并处于等待状态, 从而保证了服务器随时都可以接受到客户端的请求。
网络视频监控的实现过程首先是开启嵌入式系统上的服务程序, 服务程序就等待客户端的连接, 若有客户端连接的请求, 则服务端不间断的把从摄像头采集到的视频数据压缩处理, 并通过RTP/RTCP 协议传输至一组播地址, 客户端加入该组播, 并获取视频数据, 解码显示出来, 从而实现实时监控。
2 视频采集、压缩、显示及保存
2.1 视频采集
采集摄像头视频数据都是通过调用Video4Linux( 简称v4L) 的API 函数实现。V4L 为针对视频设备的应用程序编程提供了一系列接口函数。对于USB 口摄像头, 需要提供基本的I/O 操作接口函数read()、open()、write()、close(), 由接口函数ioct1() 实现内存映射功能以及对I/O 通道的控制, 并将它们定义structfile_operations 中。当 应用程序对设备文件进行诸如write() 等操作时, linux 内核访问驱动程序提供的函数fIie_operations。
Linux 下用V4L 视频程序设计时常用的数据结构有:
Video_capability 包含了设备基本信息: 设备名称、最大最小分辨率、信号源信息等。
Video_picture 设备采集的图象的各种属性: 如颜色、对比度、亮度等。
Video_window 关于captUrearea 的信息, 例如x,y 的坐标等。
video-mmap 用于内存映射。
另外, 对USB 摄像头用V4L 的编程需要用到ioctl() 调用和mmap() 调用。
ioctl(input/output control) 是对设备的I/O 通道进行管理的函数,既是对设备的某些特性控制, 例如图像的属性设置、串口传输波特率等。它的形式是:int ioctl(int fd,ind cmd,…) ;
应用程序获取摄像头采集的图像数据有两种方法: 一种是read() ( 直接读取的方法), 另一种是mmap() ( 内存映射的方法)。
Linux 下视频采集的基本步骤如图1 所示。
2.2 视频的压缩
实现数字网络视频监控的关键技术是视频压缩,它去掉数据中的冗余信息, 决定多媒体服务质量好坏的主要因素是压缩处理之后呈现的视频质量高低。JPEG 有损压缩是通常是采用以离散余弦变换(DiscreteCosineTransform,DCT) 为基础的有损压缩算法, 该方法压缩比为25:1, 压缩后还原的图像肉眼很难发现和原始图像的区别, 因此得到了广泛应用,
JPEG 编码的最后一个步骤是把各种标记代码和编码后的图像数据组成一帧一帧的数据, 其目的是方便传输、存储和译码器进行译码, 如此组织的数据通常称为JPEG 位数据流(JPEGbitstream)。解压缩过程是上述压缩过程的逆过程。由于MJPEG 视频流是帧内压缩的, 处理起来很方便,和单副图片基本无区别。根据JPEG 标准,JPEG 文件是以oxFFD9 作为结束标志, 成功调用函数后就会获得每一帧MJPEG 视频文件大小, 根据项目情况, 我们以MJPEG 作为系统视频压缩算法。
2.3 视频显示
位图视频流是Linux 操作系统下显示视频的操作对象, 然而我们接收的是MJPEG 视频流数据, 每一帧数据都是JPEG 格式, 系统要将接收到的JPEG 图像数据解码转换成RGB 格式,从而给系统操作形成一个位图对象。显示视频的过程如图2
图1 视频采集流程图
2.4 视频保存
文件保存在USB 硬盘上, 这就需要不停的读写I/O 设备, 此操作需要耗费大量时间、资源, 因此利用一个单独线程来保存视频文件,以提高程序的执行效率。
由于采用了MJPEG 视频压缩格式, 数据量较大, 若每帧图像都存储, 需占用的空间还是比较大的,本系统存储的速度约10 帧/ 秒, 以达到节省存储空间的目的,通过定时器来实现存储速率的控制。并且系统有自己的循环缓冲区存放压缩后的视频数据, 该线程不断从该缓冲区064
软件开发
Software Development
电子制作