首页 > 范文大全 > 正文

基于Linux的嵌入式视频监控系统应用软件设计与实现

开篇:润墨网以专业的文秘视角,为您筛选了一篇基于Linux的嵌入式视频监控系统应用软件设计与实现范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要 本文介绍了基于S3C2410硬件平台和嵌入式linux的视频监控系统结构。阐述系统的软件结构、功能和控制流。对视频采集、压缩和显示的实现进行了分析,并对服务器端和客户端关键多线程的设计给出了实现方法。

关键词 嵌入式;视频监控;Framebuffer;线程

中图分类号 TP311文献标识码 A文章编号 1674-6708(2010)18-0132-02

0 引言

视频监控直观、准确、及时,并且信息内容丰富,所以被广泛应用于许多场合,在公共安全、突发事件处理等领域发挥重要作用。随着网络、通信、多媒体、嵌入式技术的发展,嵌入式视频监控系统以其体积小、重量轻、数字化、功耗低、价格低廉等特点,正日益受到人们的重视。

本文中提及的嵌入式视频监控系统基于S3C2410X硬件平台,和2.4内核以上的Linux操作系统。采用USB摄像头进行图像采集,对获取的数字化监测画面进行现场智能处理和判断。图像不必总是传回监控中心。而是一旦判断发现异常,则可立即通过网络向检测中心报警,并传回异常画面。

1 嵌入式视频监控系统组成

系统主要由硬件和软件两部分组成。结构如图1所示。

本系统硬件选用致远公司的MagicARM2410作为嵌入式网络视频服务器的开发平台,选用USB摄像头来进行视频采集。MagicARM2410以基于ARM920T内核的S3C2410X芯片为MPU。该芯片内部集成了指令/数据Cache、3路UART、并行I/O口,且通过以太网控制芯片扩展一个以太网接口,同时引出USB主口,用来接USB 摄像头。

软件系统由系统软件和应用软件组成。前者主要是指经过剪裁并移植的Linux,内含USB内核驱动程序、USB主机控制器驱动、USB摄像头驱动等;后者包括自行开发的服务器端软件和客户端软件。

其中,服务器端模块负责视频采集、压缩、检测、报警、传输、显示等,而客户端模块则负责视频接收、解压、显示、存储等。

2 软件功能概述

服务器端的视频采集功能利用Video4Linx(V4L)来实现;视频压缩采用JPEG压缩算法;视频检测则是将JPEG图像转换为三通道的图像。

视频显示则利用了Framebuffer技术。Framebuffer是从Linux内核2.2开始引入的一种驱动程序接口。它本身不具备任何运算数据的能力,就像是一个暂时存放水的水池。CPU将运算结果放到这个水池,水池再将结果流到显示器。中间不会对数据做处理。应用程序可以直接读写这个水池的内容。

本文中提及的监测系统视频传输通过有线网络进行,采用TCP协议。也可以采用UDP协议,只是需要对相应程序做出修改。

3 应用软件功能实现

3.1 服务器端

服务器端应用程序的核心是两个线程:视频采集线程和视频发送线程。

视频数据采集用于完成对视频的实时采集和压缩功能。采用Video4Linux(V4L)技术。V4L是 Linux内核中支持影像设备的一组APIs。应用程序通过标准的系统调用即可操纵视频设备。

应用程序main函数分别判断网络和视频缓冲区初始化是否完成,之后即调用start()函数开始下列工作:

1)创建线程

thread_create();

2)视频采集初始化

init_framebuffer(FB_FILE, fv, tempbuf); // 视频缓冲区初始化

……

open_video(V4L_FILE, fv, // 打开并初始化摄像头

DEFAULT_DEPTH,

DEFAULT_PALETTE,

WIDTH, HEIGHT);

3)线程1进行视频采集和压缩

while(1){

……

rgb_to_framebuffer(fv, WIDTH, HEIGHT, // 视频图像存入缓冲区

XOFFSET, YOFFSET, image);

……

put_image_jpeg(fptr_jpg, (char *)image, // 图像压缩

WIDTH, HEIGHT,

DEFAULT_QUALITY,

DEFAULT_PALETTE);

}

4)线程2进行视频发送

while(1){

……

memset(sendbuff, 0, FILE_LENGTH); // 开辟发送缓冲区

num = read(file, sendbuff, FILE_LENGTH); // 读取图像文件大小

……

ret = send(temp_socketfd, sendbuff, ret, 0); // 发送并返回标志,以便判断是否成功

……

}

3.2 客户端

客户端应用程序的核心也是两个线程:接收线程与显示线程。采用前述的Framebuffer技术。类似地,main函数会调用start()函数开始下列工作:

1)创建线程(同前)

2)视频接收初始化

ret = client(IP); // 判断网络连接是否成功

fb_open(fb_device, &fb_width, // 打开视频缓冲区以备图像数据接收

&fb_height, &fb_depth);

3)线程1接收视频

while(1) {

++bianhao; // 给视频图像编号

……

strcat(filename,".jpg"); // 确定图像存储格式

}

4)线程2进行视频显示

其中的关键是完成图片解压缩,以及颜色转换和像素输出。

jpeg_start_decompress(&cinfo); // 开始解压缩

……

color = RGB888toRGB565(buffer[x * 3], // 颜色转换

buffer[x * 3 + 1],

buffer[x * 3 + 2]);

fb_pixel(fbmem, fb_width, fb_height, x, y, color); // 像素输出

4 结论

在S3C2410硬件平台和嵌入式Linux的嵌入式开发环境下,基于Video4Linux和Framebuffer技术,开发了用于视频采集、压缩、传输、接收和显示的多线程应用软件。软件结构简单、开发难度小,易于移植。系统可靠性、适用性好,前景广阔。

参考文献

[1] 张智超,等. 嵌入式Linux应用开发详解[M].电子工业出版社,2007.

[2] 宋宝华. Linux设备驱动开发详解[M].人民邮电出版社,2008.

[3] 孙琼编.嵌入式Linux应用程序开发详解[M].人民邮电出版社,2006.

[4] 张航,等.基于S3C2410A的嵌入式视频监控系统服务器的设计实现[J].天津农学院学报,2009,16(2).

[5] 孟旭霞,等.嵌入式远程视频监控系统的设计与实现[J].微计算机信息, 2009,25(1-2).

[6] 胡书卫,等.一种基于 Linux的嵌入式视频监控系统实现[J].安防科技,2009,1.

[7] 赵文敏,等.一种嵌入式网络视频监控系统的设计[J].计算机应用与软件,2009,126(8).