基于Linux的嵌入式远程视频监控系统设计 下载本文

内容发布更新时间 : 2024/6/3 12:44:38星期一 下面是文章的全部内容请认真阅读。

龙源期刊网 http://www.qikan.com.cn

基于Linux的嵌入式远程视频监控系统设计

作者:王治元 杨成禹

来源:《中国科技博览》2013年第26期

[摘 要]随着嵌入式技术和图像处理技术的发展,视频监控系统得到了广泛的应用。本文提出了一种远程视频监控系统,该系统以Linux操作系统为软件平台,结合S3C2440硬件平台,采用H.264视频解码技术,在不影响图片质量的情况下有效的提高了视频数据压缩的比率,并且在网络传输的过程中所需要的带宽更少,也更加经济。 [关键字]S3C2440 Linux 数据压缩 H.264

中图分类号:TG333.2 文献标识码:A 文章编号:1009-914X(2013)26-210-02 1.引言

随着科技的不断进步,远程视频监控系统广泛的应用于家居安防、建筑施工、交通运输等领域。因为嵌入式系统具有软硬件可裁剪、实时性高、成本低、体积小,功率低等特点,能很好的应用于远程视频监控系统设计当中,而且大幅度的提高了系统的性能。本文的设计方案是在ARM9处理器上运行Linux操作系统,在Linux操作系统下驱动USB摄像头对视频图像进行采集,采用H.264高效压缩算法对视频图像进行压缩,并且通过网络向客户端提供实时的视频监控服务。这种设计的优点是:①采用的是嵌入式技术,与传统的视频监控系统相比具有集成化,智能化等特点。②采用的是Linux操作系统,它的源代码是开源的,尤其是它优秀网络功能是显而易见的。③采用H.264高效压缩算法对视频图像进行压缩,这种算法不但压缩效率高,而且不影响图片质量。基于以上的优点本文所设计的系统具有巨大的经济效益和社会效益。

2.系统设计方案

远程视频监控系统由三部分组成①数据处理模块是由H.264编码库和采集传输应用程序组成。②USB视频采集模块是由USB驱动程序和USB摄像头组成。③图像显示模块是由运行在windows平台上的解码应用程序充当。通过USB摄像头采集图像数据,再由采集传输应用程序获取采集图像的数据并利用H.264编码库对数据进行压缩。最后通过UDP/IP协议传输给客户端进行解码显示。整个系统结构如图1所示。 3.系统硬件设计

本设计采用的是广州友善之臂计算机科技有限公司开发的一款ARM9开发板,mini2440采用 Samsung S3C2440 为微处理器,主频为400MHz,最高可达533MHz。 并采用专业稳定的 CPU 内核电源芯片和复位芯片来保证系统运行时的稳定性,内部集成了ARM920T处理器内核并且具有MMU管理单元。Mini2440有丰富的接口资源,有一个采用DM9000网络芯片的

龙源期刊网 http://www.qikan.com.cn

100M以太网 RJ-45 接口,1个USB Host,1个USB Slave B型接口等。其存储单元采用的是64M的SDRAM和256M的Nand Flash。本系统采用的是Webeye V2000 型号的摄像头。其详细参数为像素35万,最大分辨率640*480,最大帧数为30FPS,成像范围是6mm到极远,对焦方式为手动。Linux2.6版本支持对Webeye V2000 型号的摄像头的驱动。 4.系统软件设计

远程视频监控系统的软件设计方案是通过Linux系统内部的设备内核驱动video4linux接口函数对图像进行采集工作,并通过H.264压缩算法对图像数据进行压缩编码处理,处理后的数据通过UDP/IP协议传输至电脑端解码并且显示。 4.1 Linux中的视频设备内核驱动video4linux

本系统采用Linux中视频设备的内核驱动video4linux(简称V4L)进行图像的采集工作。V4L分为两层,底层是视频设备在内核中的驱动,上层是为系统提供应用程序编程接口。当一些视频软件需要采集图像的时候Linux内核就会提供给用户空间的应用程序编程接口,当视频设备开发相应的驱动程序后,就可以通过V4L提供的系统应用程序编程接口来控制视频图像的采集工作。

4.2 图像数据的采集与传输

视频图像的采集与传输主要分为6个步骤。流程图如图2所示。 设备文件的打开使用的是open函数,

Camera _fd = open(USB_VIDEO_CAMERA,O_RDWR);//打开设备文件 初始化H.264编码库,需要用到编码库中的主要函数, const char* encoderfile = \;//编码准备

int_param(&m_param,encoderfile);// 获取encoderfile.txt文件信息 m_t264 = T264_open(&m_param);//264编码的打开

m_pDst = T264_malloc(m_lDstSize,CACHE_SIZE);//分配内存 初始化摄像头需要用到V4L中的应用程序接口函数,并且使用IOCTL命令

VIDIOCSWIN,设置摄像头的基本信息,包括最大分辨率、最小分辨率、显示的原点坐标,采集图像的高度和宽度等。

龙源期刊网 http://www.qikan.com.cn

进行图像采集使用的是IOCTL函数对摄像头发送命令,并且使用mmap函数将设备文件映射进内存进行操作。与直接使用read系统调用函数相比较,mmap内存映射函数提高了数据读取的效率,使得进程可以直接读取内存。

ioctl(camera_fd,VIDIOCMCAPTURE,&camera_mm);//截取一帧的图像 ioctl(camera_fd,VIDIOCSYNC,&frame);//等待一帧的图像截取完毕 mmap(0,camera_mbuf.size,PROT_READ|PROT_WRITE,MAP_SHARED,camera_fd,0);// 把摄像头对应的设备文件映射到内存区 使用iActualLen函数对采集到的数据通过H.264进行编码,

iActualLen = T264_encode(m_t264,cam_data,m_pDst,row_stride);

图像数据的传输采用的是UDP协议,UDP是用户数据报协议(User Datagram Protocol,UDP)的简称,其主要作用是将网络数据流量压缩成数据报形式,提供面向事务的简单信息传送服务。与TCP协议不同,UDP协议直接利用IP协议进行UDP数据报的传输,UDP提供的是面向无连接的、不可靠的数据报投递服务。本系统数据传输采用的协议就是UDP协议,在服务端程序中,进行UDP通讯的编程步骤如下:

①通过函数socket创建一个套接字,并通过该函数的返回值获得套接字的描述符。 ②通过bind函数将服务器的IP地址和该套接字绑定。 ③通过listen函数设定监听的端口数。

④通过accept函数等待接收客户端的连接请求。

⑤通过sendto函数向某个地址发送消息或者使用recvfrom接收消息。 ⑥通过close函数关闭套接字,退出UDP通信。 5.系统测试

在客户端计算机上打开应用程序长春理工大学远程视频监控.exe,并且点击开始监控按钮,得到的视频监控图像如图3所示。 结束语

本文设计了一套基于Linux操作系统,配合S3C2440开发板的远程视频监控系统,采用H.264视频解码技术有效的对图像数据进行了压缩,并且通过UDP协议将压缩后的图像数据传