当前位置: 首页 > 编程日记 > 正文

linux 远程挂载摄像头_基于Linux的嵌入式网络摄像机设计

本嵌入式网络摄像机采用高性能ARM9芯片微处理器,内置嵌入式Web服务器。

通过嵌入式多任务操作系统采集摄像机视频数据;采集的视频信号数字化后经MJPEG算法压缩,再通过内部总线送到内置的Web服务器;使用者可以直接用浏览器观看Web服务器上的摄像机图像;通过通用网关接口CGI,授权用户还可以控制摄像机、云台和镜头的动作或直接通过Web页面对系统进行配置。

引言

基于同轴电缆的视频监控系统结构复杂、稳定性差、可靠性低且价格昂贵,因而出现了嵌入式网络摄像机等远程Web视频监控系统。本嵌入式网络摄像机,采用高性能的ARM9芯片作微处理器,内置嵌入式Web服务器—Boa,通过嵌入式多任务操作系统—Linux采集摄像机视频数据;摄像机采集的视频信号数字化后经MJPEG算法压缩,压缩后的视频流再通过内部总线送到内置的Web服务器;通过在网页中嵌入图像播放器,用户可以直接通过浏览器观看Web服务器上的摄像机图像;通过通用网关接口CGI,授权用户还可以控制摄像机、云台和镜头的动作或直接通过Web实现对系统进行配置。

1 嵌入式网络摄像机系统原理及组成结构

嵌入式网络摄像机的基本原理:在嵌入式Linux操作系统中内置Web服务器Boa,摄像机采集视频信号并将其数字化,经MJPEG压缩后,传送到内置的Web服务器,通过Web页面将视频信息发布到Internet。由于嵌入式网络摄像机是视频采集终端和Web服务器的融合,因此,用户可以直接通过浏览器观看摄像机拍摄的视频图像,达到远程监控的目的。

整个系统由视频采集模块、视频压缩模块、Web服务器、通用网关接口、Web页面等5个部分组成。 其硬件结构如图1所示:

图1 嵌入式网络摄像机硬件结构图

视频采集模块包括以S3C2410X为核心的中央控制和数据处理中心,以及USB Camera数据采集单元。中央控制和数据处理中心主要完成视频采集终端的控制和视频图像的压缩;Web服务器完成基本服务器的功能,负责响应HTTP请求,配合视频采集、压缩模块完成图像信息发布;通用网关接口—CGI,可以根据用户输入的数据信息,控制摄像机、云台和镜头的动作或直接通过Web实现对系统进行配置。

嵌入式微处理器是嵌入式系统的“硬核”。微处理器的选择将对整个嵌入式系统的成本和性能产生决定性的影响。目前,比较流行的处理器主要有:Power PC 、MIPS、Intel、ARM等。ARM(Advanced RISC Machines)公司是一家全球领先的嵌入式微处理器IP(Intellectual Property )核提供商,它设计了一系列高性能、低功耗、低成本和高可靠性的RISC处理器核、外围部件和系统级芯片应用解决方案。当前,ARM系列微处理器核广泛应用于便携式通讯设备、手持终端、多媒体数字消费产品等嵌入式系统解决方案中。本设计选用以ARM920T为核心的S3C2410X 32位微处理器,该处理器集成了LCD控制器、USB Host、USB Slave、NAND控制器、中断控制、功率控制、UART、SPI、SDI/MMC、IIS、GPIO、RTC、TIMER/PWM、ADC等丰富的资源。

操作系统是嵌入式系统的“软核”。早期的嵌入式系统,由于当时还没有操作系统的概念,系统的主要功能都是用汇编语言实现的,其兼容性、通用性及扩展性都很差。随着硬件性能不断提高,在嵌入式系统中使用通用操作系统已成为现实。在嵌入式系统中引入操作系统后,利用软件工程的思想指导嵌入式系统开发,其开发效率和资源可重用率都将得到很大的提高。目前较为流行的嵌入式操作系统有:VxWorks、Neculeus、WindowsCE、Linux等。相对其它商业操作系统,Linux这个开源网络操作系统有以下独特优势:

(1) 价格低廉。在保证产品性能的前提下,价格永远都是系统设计时必须考虑的重用因素之一。由于Linux来源于开源社区,相对于其它商业操作系统,其价格几乎为零。

(2)文档丰富。全世界的Linux程序员都是技术顾问,任何人都可以在开源社区得到其系统所需要的文档和帮助。

(3)网络性能优良。与Unix一脉相承的Linux支持多种网络协议,并能够使系统长期稳定运行。

(4)知识创新。在国产操作系统中,嵌入式操作系统被认为是唯一可以赶超国外同行的操作系统。而Linux是操作系统中的佼佼者,任何人都可以遵照GPL规则发布包含自己知识产权的产品,可以高效地进行知识创新,少走弯路。

为此,本设计选用高性能ARM9芯片和嵌入式Linux操作系统。

2 视频采集模块设计与实现

视频采集模块是嵌入式网络摄像机的核心模块之一。它通过嵌入式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。

3 视频压缩模块设计

由于摄像机采集到的视频数据信息量较大,如果直接将其处理成视频,将会给视频处理和网络数据传输带来很大的负担。因此,本设计采用高性能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目录的属性的设置。

5 浏览器与服务器之间的通信—通用网关接口

CGI(Common Gateway Interface)是外部应用扩展程序与WWW服务器交互的一个标准接口。按照CGI标准编写的外部扩展程序能够处理客户端浏览器输入的数据,从而完成客户端与服务器的交互、实现动态Web技术。在本设计中,当用户通过浏览器向网络摄像机发送控制信息(比如控制摄像机云台的动作等)时,服务器守护进程启动CGI模块,CGI模块通过串口将控制传给服务器。如图二所示:

图2 CGI控制云台动作原理流程图

6 Web页面的设计

在本嵌入式网络摄像机中,Web页面的主要功能是显示Web页面及动态视频信息。由于标准的html网页只具有显示文字和图片的功能,因而无法在标准的html网页里嵌入一个窗口来“实时”观看视频图像。解决这个问题的一种方法是将“实时”视频监控软件嵌入到网页中。Microsoft 制定了ActiveX规范,只要符合这个规范的软件都可以嵌入到网页中。为了能满足多人同时“实时”观看视频图像,在本设计中选用标准ActiveX控件—VgPlayerObject来实现这一功能。

7 结束语

本文提出了一种基于ARM S3C2410X和Linux的嵌入式网络摄像机设计。采用嵌入式Linux操作系统进行视频采集、压缩并通过ActiveX控件显示动态视频,通过嵌入式Web Server和CGI技术融合整个系统,形成一套完整的网络摄像机系统解决方案。由于系统采用高性能嵌入式处理器完成主要控制、压缩和Web处理工作,因此该系统具有结构简单、性能稳定、成本低廉等优点,在油田、油气井现场视频实时监控、智能小区、移动监控等领域具有广阔的应用前景。

本文作者创新点:成功将CGI技术应用到嵌入式网络摄像机中,利用简单的方法实现了用户和嵌入式系统的交互,本网络摄像机在智能监控和移动监控中有广阔的应用前景。

参考文献:

[1] 曹 翔. 实时视频传输在MPLS网络中的QoS研究[J]. 微计算机信息,2006,7-3:58-60.

[2] 陈俊宏.Embedded Linux嵌入式系统原理与实务[M].北京:中国铁道出版社,2004.

[3] 杨大千等.基于ARM9和Linux的嵌入式动态Web技术设计与实现[J].工业控制计算机,2006,8.

相关文章:

2012 ARM嵌入式开发应用研讨会杂谈

记得以前参加的ARM的研讨会,名称是技术研讨会,不知道为什么现在改名为嵌入式开发应用研讨会了。不过今年演讲的重点就是 ARM DS-5开发工具(还免费发放了一本《Linux/Android开发利器 ARM DS-5使用指南》书籍),也许这就…

打印不同对象的字节表示 ( 对int*强制转换成unsigned char*的理解 )

此文章参考《深入理解计算机系统》P31。 先看如下代码&#xff1a; 12345的十六进制表示为&#xff1a;0x00003039 1 #include <stdio.h>2 3 int main()4 {5 int a 12345;6 char *q (char *)(&a);7 for(int i 0; i < sizeof(a); i)8 prin…

NAT技术和代理服务器

一、代理服务器 所谓“代理”&#xff0c;就是代而劳之的意思。代理服务器就是代理网络用户去取得网络信息&#xff0c;形象的说&#xff1a;它是网络信息的中转站&#xff0c;使得一个网络终端和另一个网络终端不直接进行相连&#xff0c;代理网络用户去取得信息。主要工作在O…

链接全局变量再说BSS段的清理

废话就不多说了&#xff0c;开始。。。 再说BSS段的清算 以前遇到一个裸机程序不能改变全局变量值的问题&#xff0c;最后模模糊糊处理了&#xff1a;手动添加了一个链接脚本&#xff0c;清算了BSS段。问题得以处理&#xff0c;就认定是BSS段清算的问题&#xff0c;全局变量在B…

ios启动页尺寸_关于移动端App启动页的策划方案

App启动页是指app在启东时需要加载必要的运行环境和配置&#xff0c;在这个过程中提示用户等待的一个过渡页面。在产品经理眼里启动页是app给予用户重要的第一印象&#xff1b;也是App最重要的黄金页面之一&#xff0c;所有用户100%都会看到的页面。启动页适合用来做以下几个事…

事件流--事件冒泡现象及阻止

事件冒泡现象 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>事件冒泡现象</title><style>div{padding: 50px;}#div1{background: red;}#div2{background: blue;}#div3{background: yell…

谁知道静态成员的纠结心境

我们在实际开发的过程中&#xff0c;可能需要某些类的成员变量并不是针对每一个对象的&#xff0c;而是针对每一个类而言的&#xff0c;比如在银行中有一个利率数据&#xff0c;我们希望的是&#xff0c;当一个利率改变的时候&#xff0c;所有的对象都能够看到这个改变的数据&a…

.net ConfigurationSectionDesigner插件使用

最近接触了vs2010的一款插件&#xff1a;ConfigurationSectionDesigner。ConfigurationSectionDesigner是一个图型化设计.net的配置块和自动生成需要代码和schema定义的codeplex上的一个开源项目&#xff0c;现在分享出来&#xff0c;希望对大家有所帮助。 .Net配置体系中可以是…

对应到对象 数据库驼峰_【GI的自主空间数据库】一种竞争力,叫技术引领;一种竞争力,叫时间沉淀...

引子&#xff1a;GI的自主空间数据库及GIS框架来自于求学时MAPGIS的引导&#xff0c;工作时ARCGIS的追随&#xff0c;读博时IBM和Microsoft2篇文献...。即使在大数据技术发展的今天&#xff0c;自主空间数据库存储仍然有其技术优势&#xff0c;近20年的时间沉淀&#xff0c;是G…

TSM备份Windows数据

一、备份数据 1.使用备份勾当客户端&#xff0c;可以在原始文件出现损坏的时候&#xff0c;恢复备份版本。TSM提供备份和恢复文档的类型包括:FAT&#xff0c;NTFS和FAT32.2.合适备份和合适归档文件当备份-归档客户端备份或归档一个文件&#xff0c;他会发送一份文档的副本和它的…

GM Tech 2 works with Hummer Yes or No

This is about GM Tech 2 scan tool for Hummer troubleshooting and programming. Can I have a cheap Tech 2 for Hummer? Yep. Both the original and HQ clone can work for your car. Where can I get a working clone at a good price? https://www.obd2tool.com/goods…

程序的编译和链接过程

一.虚拟机、linux简介简单介绍一下虚拟机还有就是各种操作系统&#xff0c;比如centos&#xff0c;Ubuntu操作系统&#xff1a;linux&#xff08;centos、Ubuntu、redhat&#xff09;&#xff0c;Android&#xff0c;Windows&#xff08;xp、win8、win10&#xff09;进程&#…

Nosql网络阅读

#1 Node.jsmongodb 开源项目 https://github.com/DoubleSpout/wujb  作者博客:http://snoopyxdy.blog.163.com/blog/static/60117440201261844125973/ #1 关系数据库还是NoSQL数据库 NoSQL的分类 NoSQL仅仅是一个概念&#xff0c;NoSQL数据库根据数据的存储模型和特点分为很多…

python 文案自动生成_Python自动化测试如何自动生成测试用例?

原文作者&#xff1a;陈安妮annie1原出处&#xff1a;简书上文内容不用于商业目的&#xff0c;如涉及知识产权问题&#xff0c;请权利人联系博为峰&#xff0c;我们将立即处理。传统的测试用例需要测试或者开发人员将用户的操作用代码表示出来&#xff0c;通过断言判断是否和预…

Linux下图解minicom安装

Linux下图解minicom安装 minicom是一个串口通信工具&#xff0c;就像Windows下的HyperTerminal。可用来与串口设备通信&#xff0c;如调试交换机和Modem等。它的Ubuntu软件包的名称就叫minicom&#xff0c;用apt-get install minicom即可安装。全文见附件pdf

【C#技术】一篇文章搞掂:Infragistics组件库

工具栏 // 按钮不可按 tool.SharedProps.Enabled false; Grid // Grid中记录时间 // 建议SQL Server中使用字符字段&#xff08;没有深入测试&#xff0c;只是字符字段可行&#xff09;&#xff0c;然后设置Grid的属性中&#xff0c;列的Style属性为Time或TimeWithSpin// 使用…

移动端开发小结

1. viewport viewport&#xff1a;除去所有工具栏、状态栏、滚动条等之后用于查看网页的区域&#xff0c;打个比方&#xff0c;现在有一张报纸摆在你面前&#xff0c;但是这张报纸被一本书压住了&#xff0c;所以你只能看到报纸的一部分&#xff0c;这部分可以查看到的区域就是…

vim编辑文章后不能修改

我们在使用vim打开一个文件的时候&#xff0c;经常会弹出下面的界面 为什么会出现这个界面呢 用vim编辑文件(如这里的test.txt)时,系统会自动产生一个文件叫.test.txt.swp.如果正常退出,此文件会被自动删去.如果上次非正常退出,如果再编辑它,系统会首先查.test.txt.swp 是否存…

echart x轴标签偏移_移动端H5页面滑动手势X轴实例

话不多少&#xff0c;上代码。let touchX 0 // 默认初始值// 两行注释伪代码&#xff0c;绑定 touchstart 与 touchend 事件// dom.addEvenetListener(touchstart, touchStart)// dom.addEvenetListener(touchend, touchEnd)function touchStart(e) { // 手指触碰时候&#xf…

读书笔记(2) OpenLayers中的图层

OpenLayers有多个不同的图层类&#xff0c;每一个都可以连接到不同的地图服务器。例如通过Layer.WMS类可以连接到WMS地图服务器&#xff0c;通过Layer.Google类可以连接到谷歌地图服务器。OpenLayers中的每个图层都是独立的&#xff0c;对一个的操作不会影响到另外一个。 不管地…

自定义WPF窗体形状

介绍 你好WPF爱好者。 随着WPF等统一API语言的发明&#xff0c;丰富用户界面变得非常容易。 创建丰富的用户界面只是一个想法。 您需要拥有的是创造性思维和最新技术融合。 WPF和Expression Blend在制作丰富的UI应用程序&#xff0c;清晰的图形和非常好的动画方面非常有用。 背…

与jQuery的感情碰撞——由浅入深学jQuery

原来的时候自己看过jQuery&#xff0c;但是对于什么是jQuery&#xff0c;除了知道jQuery是一种javascript类库外&#xff0c;除了会用几个网页特效外&#xff0c;其他的我这真的是不知道啊。眼看自己就要找工作了&#xff0c;所以自己需要好好学习一下&#xff0c;系统的了解一…

线程互斥和同步-- 互斥锁

一. 线程分离我们一般创建的线程是可结合的&#xff0c;这个时候如果我们调用pthread_jion()去等待的话&#xff0c;这种等待的方式是阻塞式等待&#xff0c;如果主线程一直等待&#xff0c;主线程就无法做其他的事情了&#xff0c;所以应该使用线程分离&#xff0c;让子线程由…

calipso是什么意思_眰恦是什么意思?

展开全部眰恦作为一个不常见到的词&#xff0c;其实出自一本同名小说的书名。眰恦读作zh shng &#xff0c;在书中62616964757a686964616fe59b9ee7ad9431333433656665的意思就是&#xff0c;目光所至&#xff0c;心之所向&#xff0c;皆是你。眰&#xff0c;单字意思是视&#…

一个mongosee例子

var express require(express),mongoose require(mongoose); //引入mongoose模块 //连接mongodb数据库 nodejs为数据库名称 mongoose.connect(mongodb://localhost/nodejs);//获取Schema 以及 ObjectId 对象 var Schema mongoose.Schema,ObjectId Schema.ObjectId;//创建一…

mongoDB入门

**使用了不存在的对象&#xff0c;即创建该对象use db 使用db数据库 show dbs 查看当前服务器中写在磁盘上的数据库 show tables 查看数据库中的collection db 查看当前使用的数据库1.增删改查&#xff1a; 增&#xff1a;db.collection.insert({数据}) 自动生成 _id : ObjectI…

哈希--直接定值法和除留取余法

1. 哈希是一种算法&#xff0c;哈希表是用哈希算法构造出来的一种数据结构2. 哈希算方法的几种方法直接定值法 这里有一个例题&#xff0c;就是我们想判断某一字符串中&#xff0c;某一个字符出现的个数&#xff0c;我们可以使用哈希的思想&#xff0c;就是可以遍历一遍字符串&…

两条波浪线符号_四年级数学上册第二单元“线的认识”作业单(附带答案)

“线的认识”作业单一、线段、射线和直线。1.“线段、射线和直线”之间的联系与区别。名称形状长度端点关系2.表示方法&#xff1a;分别画出一条线段、射线和直线&#xff0c;并用字母进行表示。3.概念&#xff1a; (1) (2) (3) 二、相交与垂直1.概念&#xff1a;(1) (2)表示方…

CTime类小结1

参考&#xff1a;http://www.cnblogs.com/chuncn/archive/2009/03/12/1409261.html CTime类1&#xff0e;构造和初始化CTime类对象CTime类有下列构造函数&#xff1a;CTime&#xff08; &#xff09;;CTime&#xff08; const CTime& timeSrc &#xff09;;CTime&#xff0…

oracle数据库动态与静态注册

oracle数据库动态与静态注册 动态注册:1.服务名来自于参数文件中的service_names或者是db_name与db_domain的组合;2.实例名来自与参数文件中的instance_name;3.动态注册不需要listener.ora监听文件支持;4.实例状态为READY或BLOCKED;静态注册:1.服务名来自于监听文件中的GLOBAL_…