- 浏览: 145536 次
- 性别:
- 来自: 广州
最新评论
-
yinren13:
说的便捷的视频会议,我们公司的遥控器一按就能开始的视频会议tu ...
便捷视频会议 -
xujinquan19:
...
可视通讯与移植、跨平台开发 -
xujinquan19:
...
Android 平台下的即时通讯 -
xujinquan19:
...
Android 平台下的即时通讯 -
xujinquan19:
...
Android 平台下的即时通讯
随着嵌入式处理器和开源Linux 的广泛应用,各种视频服务在嵌入式系统中逐渐发展起来。
1.引言
随着多媒体技术、视频压缩编码技术、网络通讯技术的发展,数字视频服务器逐渐发展起来。近年来随着嵌入式处理器和开源Linux 的广泛应用,视频服务已逐渐与嵌入式相结合。本文提出了一种嵌入式 web 视频服务器的构建方法,该系统以嵌入式 Linux 和 S3C2440 为核心平台;在这个平台上构建 web 服务器和视频服务器,客户可以直接通过浏览网页的方式观看视频。
2.视频采集传输模块的构建
本系统采用的硬件平台是基于 ARM920T架构的嵌入式开发板 S3C2440,CPU 主频400MHz,该开发板集成了64MB 32 位的 SDRAM 和 64MB 的NANDFLASH,三个USB host 口,3 路UART,4 路DMA,一个采用CS8900Q3 以太网控制芯片的10M 网络接口等。摄像头采用中星微301 芯片的USB 摄像头。本系统软件部分由视频采集传输模块和web 服务器组成。
2.1 视频采集模块
在进行视频采集前需要先安装驱动,video4Linux 是 Linux 中关于视频设备的内核驱动,它为针对视频设备的应用程序编程提供统一的编程接口。本系统的 S3C2440 开发板自带的是Linux2.6.12 内核,该内核编译时已加进关于视频设备的内核驱动Video4Linux[1]。使用video4Linux 进行采集视频的流程图如图 1 。
(1)设备的初始化
调用 open 打开设备,利用 ioctl()对设备进行控制,比如设置对比度、亮度、调色板, 访问模式等等。主要代码如下:
int fd = open(“/dev/v4l/video0”,O_RDWR); //打开设备
/* 获取设备的基本信息(设备名称、支持的最大最小分辨率、信号源信息等)*/
ioctl(vd->fd, VIDIOCGCAP, &(vd->capability)):
/* 获取设备采集的图象的各种属性 /*
ioctl(vd->fd, VIDIOCGPICT, &(vd->picture));
/* 如果需要改变图像的信息,先改变 picture 中的相应的变量值,再调用 ioctl(vd->fd,
VIDIOCSPICT, &(vd->picture))即可,本程序初始化全部采用默认值 */
(2)采集图像
本系统使用内存映射的方式采集图像,线程采集函数grab()主要代码如下:
/* 分配一段内存,存放采集到的图像数据 */
vd->pFramebuffer =(unsigned char *) mmap (0, vd->videombuf.size, PROT_READ| PROT_WRITE,MAP_SHARED, vd->fd, 0);
for(;;)
{
/* 开始截取一帧图像,使用内存映射的方式*/
if ((ioctl (vd->fd, VIDIOCMCAPTURE, &(vd->vmmap))) < 0)
{
perror ("vidiocmcapture error\n");
erreur = -1;
}
/* 等待一帧数据采集完毕,采集到的图像数据就放到了 vd->pFramebuffer 起始的内存地址内,大小为vd->videombuf.size 字节 */
if (ioctl (vd->fd, VIDIOCSYNC, &vd->vmmap.frame) < 0)
{
perror ("vidiocsync error\n");
erreur = -1;
}
}
然后在main 函数中创建采集线程,pthread_create (&w1, NULL, (void *) grab, NULL); 该线程一直运行,不断采集图像数据,同时把数据放到缓冲区内,发送线程从缓冲区读取视频数据。
2.2 视频传输模块
本系统支持多个客户同时访问,所以为每个连接的客户端创建一个线程,专门负责与客户端进行数据交互。首先调用 socket()创建套接口,然后bind()绑定7000 端口到该套接口,调用 listen()监听该套接口,等待客户端的连接,最后调用 accept()与客户端建立连接。视频传输模块的流程如图3:
下面给出创建线程的关键代码:
while (signalquit) //如果没有退出信号就一直运行下去
{
/* 等待客户端的连接,如果没有连接就一直阻塞下去,如果有客户连接就创建一
个线程,在新的套接口上与客户端进行数据交互 */
if ((new_sock = accept(serv_sock, (struct sockaddr *)&their_addr, &sin_size)) == -1)
{
continue;
}
pthread_create(&server_th, NULL, (void *)service, &new_sock);
}
线程函数 server()主要是读缓冲区数据,写入套接口,同时读取套接口的数据,设置下一次采集图像的属性,这里就不再给出代码。
3.嵌入式web 服务器
嵌入式 web 服务器就是把 web 服务器移植到嵌入式系统的服务器。它仍然是基于http文本协议进行通信的,具有标准的接口形式,对客户端来说,访问嵌入式 web 服务器就和访问普通的web 服务一样。Boa 是一个小巧的web 服务器,可执行代码只有70KB,占用的系统资源少,速度快安全性能高,本系统采用的就是boa服务器,下载源码解压后,需要修改makefile文件,把其中变量 CC 的值改成arm-linux-gcc,LD 改成arm-linux-ld,然后make 就可以生成boa 应用程序了,下载boa 和boa.conf 到开发板上,然后根据开发板文件系统,修改boa.conf配置文件,比如日志路径,web 根目录等,把web 页面放入根目录,boa 通过读取配置文件里的根目录内容,就可以返回用户请求的web 页面了。
本系统的Web 页面用HTML 语言设计,如果想通过该web 页面传输视频数据,需要一
个applet 小程序[7],该程序通过HTML 语言中的applet 标记引入,下面是引入applet 程序的
代码:
<applet codebase="." archive="JWebcamPlayer.jar" code="JWebcamPlayer.class"
name="JWebcamPlayer" ID="JWebcamPlayer" align="center" width="400" height="400"
MAYSCRIPT>
<param name="Color" value="#ffffff">
<param name="Server" value="">
<param name="Port" value="7000">
<PARAM NAME="scriptable" value="true">
<PARAM NAME="mayscript" value="true">
</applet>
Codebase 和code 属性给出applet 类的完整路径,align 是applet 窗口显示的位置,width和height 是applet 窗口的大小,Port 是服务器端的视频采集程序的绑定端口,Server 是服务器地址的值,不过是在JWebcamPlayer.java 程序中通过gethost()得到,所以这里设置为空。该applet 程序调用 JWebcamPlayer.jar 包与服务器端的视频发送线程进行数据交互,并在浏览器上显示视频。
JWebcamPlayer 程序获取端口传入的数据并解析,生成对象,输出到Frame 对象中,完成视频播放,可以达到20fps 的帧率。
该applet 小程序以及JWebcamPlayer.jar 是保存在web 服务器上的,当用户访问web 服务器观看视频时,该程序自动装载到网页里,由用户的浏览器解释执行。Applet 被调用时,自动执行JWebcamPlayer.jar 包,该包首先进行一些 socket 和图像显示的初始化工作,比如上段说的得到服务器IP,端口,设置颜色值等,然后调用 start()连接视频服务器,播放视频。web 服务器和客户端的交互图如图2 所示。
4.系统试验
本系统的测试在局域网内进行。客户端使用的是 Windows XP 操作系统,浏览器使用Windows XP 自带的IE 浏览器,因为播放程序包含java 控件,需要先安装 JRE,让浏览器支持java 控件。服务器端使用的是TE2440 自带的Linux 操作系统,把摄像头插入开发板的USB 接口,通过网线把开发板接入本地局域网,通过串口终端把开发板IP 设为本地地址:222.22.66.246 , 启动视频采集程序和web 服务器 。
5.结束语
本文介绍了一种嵌入式 web 视频服务器系统的构建方法,该系统已经在 S3C2440 开发板上实现,可以在局域网内使用。对该系统稍加改进,比如加入视频编码,流控制等,即可实现远程的视频通信。在项目开发周期中,企业考虑最多的便是所需要投入的研发人员数量以及由此所产生的人力资源费用。在即时通讯领域,如果企业组建团队全部自己来开发,将会遇到多方面的困难,其中包括:1)、所涉及到的技术面较多,包括音视频采集、编解码、流媒体传输、P2P技术、混音技术等,组建一个团队需用多方面的人才;2)、所涉及到的技术都是底层技术,要求团队成员有非常丰富的开发经验,而且需要对底层技术有较高的造诣,而且需要精通C++编程,否则项目的风险将不可控;3)、开发是一个长期的过程,企业将面临居多的风险,所需要的开发费用将成为企业的负担。使用AnyChat SDK可以让企业关注自身的业务需求,由于AnyChat SDK支持VC++、Delphi、C#、VB.Net等开发语言,所以企业组织开发团队时可根据自身的研发力量灵活决策,以较小的人力资源投入获得较高的收益。
<!--正文 end-->发表评论
-
手机视频会议
2012-11-16 14:03 813在这个时代,手机被开发者们所赋予的意义已经远远超出了大众的期望 ... -
视频通讯demo源码
2012-11-09 15:23 1103以下为anychat视频通讯系统中的部分回调函数源码: 具体 ... -
音视频对话开发
2012-09-20 17:21 713AnyChat for Android是佰锐科技继2010年发 ... -
H.264视频编码标准在网络视频监控系统中的应用 .
2012-08-24 15:13 913【摘 要】本文介绍了ITU-T最新高性能视频压缩标准H.264 ... -
安卓平台下的即时通讯
2012-08-24 15:12 940基于Android 平台简易即时通讯的研究与设计 摘要 ... -
iOS音视频封装与传输demo
2012-08-24 15:01 1947ios没有直接得api用来封装传输rtp,但是经常有用到得接收 ... -
手机音视频应用开发(专注于Symbian、iPhone、Android等跨平台音视频应用开发方案)
2012-08-24 14:47 1115一款好的手机应用, 能让用户在第一分钟就爱上他, 一款烂的手 ... -
手机视频通讯开发
2012-08-24 14:46 787如今,3G网络快速发展 ... -
android视频开发
2012-08-16 17:31 986摘要:论文简单介绍Android 平台的特性,主要阐述了基于A ... -
android视频聊天软件推荐
2012-08-15 17:00 1028正在当前那个社会 ... -
音视频交流服务系统
2012-03-15 16:22 877下面的这个平台是一种视频服务的应用,比如A(客户端)打视频电话 ... -
音视频开发平台
2012-03-15 16:12 806近日,腾讯公司发布了Q ... -
即时通讯开发平台(音视频)
2012-03-15 16:11 900近日,腾讯公司发布了Q ... -
手机视频之营销模式
2012-02-16 10:43 8713G时代的逼近,手机视 ... -
手机视频应用开发
2011-12-30 14:56 751AnyChat for Android是佰锐科技继2010年发 ... -
Android视频通话(即时通讯,可视电话,视频通讯,监控,电视直播)推荐
2011-06-22 15:21 2008正在当前那个社会里,相信良多伴侣都是独自一人正在中地拼搏,好久 ... -
安卓视频通讯与监控系统完全版本正式发布
2011-05-04 17:12 1082通过数个月的研发,视频通讯安卓版本的程序已经出来了。 ... -
LINUX常用命令
2011-04-22 15:22 632Linux 系统常用命令格 ... -
Linux网络编程
2011-04-22 15:17 661Linux网络编程 linux socket的 ... -
GCC对ARM支持的所有优化选项及指令
2011-04-22 15:11 19713.17.1 ARM Options These `-m' ...
相关推荐
嵌入式Linux的web视频服务器的构建
第3章 构建嵌入式linux系统 71 3.1 嵌入式系统开发环境的构建 71 3.1.1 嵌入式交叉编译环境搭建 71 3.1.2 minicom和超级终端配置及使用 76 3.1.3 宿主机服务配置 83 3.2 bootloader 87 3.2.1 ...
5.1.1 嵌入式Web服务器101 5.1.2 GoAhead介绍101 5.1.3 GoAhead在ARM平台上的移植102 5.1.4 页面操作102 实验5.1 嵌入式WebServer GoAhead实验103 5.2 嵌入式Web Service gSOAP的移植与应用105 5.2.1 gSOAP...
5.1.1 嵌入式Web服务器101 5.1.2 GoAhead介绍101 5.1.3 GoAhead在ARM平台上的移植102 5.1.4 页面操作102 实验5.1 嵌入式WebServer GoAhead实验103 5.2 嵌入式Web Service gSOAP的移植与应用105 5.2.1 ...
5.1.1 嵌入式Web服务器101 5.1.2 GoAhead介绍101 5.1.3 GoAhead在ARM平台上的移植102 5.1.4 页面操作102 实验5.1 嵌入式WebServer GoAhead实验103 5.2 嵌入式Web Service gSOAP的移植与应用105 5.2.1 gSOAP...
Linux平台下的web动态服务器,支持CGI脚本程序,支持post、get、handle等方法
5.1.1 嵌入式Web服务器101 5.1.2 GoAhead介绍101 5.1.3 GoAhead在ARM平台上的移植102 5.1.4 页面操作102 实验5.1 嵌入式WebServer GoAhead实验103 5.2 嵌入式Web Service gSOAP的移植与应用105 5.2.1 gSOAP...
基于嵌入式Linux系统(KT505)的Web Server设计与实现,唐璐,徐钊,主要论述了在嵌入式系统中搭建Web服务器, 以北京台康资讯有限公司开发KT505为基础, 构建嵌入式Linux系统, 实现在KT505平台上的Web Server网��
构建完整的嵌入式Linux系统…………………… 1.桌面系统的启动…… 2.下载可读写的文件系统Yaffs… … 3.Yaffs文件系统移植…… 4.Yaffs作为根文件系统启动… 5.完整的嵌入式Linux系统…… 四.嵌入式WEB服务器…… 1...
通过配置μClinux嵌入式操作系统及BOA服务器构建了基于嵌入式的Web服务器。通过编写设备驱动程序和服务器CGI程序实现对Web网页的交互访问。测试结果表明:嵌入式Web服务器控制设备不受距离和环境限制,实现对设备...
2. 移植嵌入式web服务器Boa 3. 移植madplay音乐播放器 第八部分 嵌入式驱动开发 第十九讲 Linux字符设备驱动 1. 嵌入式设备驱动概述 2. Linux字符设备驱动结构 3. 字符设备驱动程序设计实例 4. 中断和同步的处理 第...
另外,嵌入式系统一旦具备网络接入功能,其信息处理能力更加强大,因此有必要为嵌入式系统构建Web服务器。 本文主要目的是研究基于ARM的嵌入式Linux开发平台构建,并在此基础上进行网络应用程序的开发。 选用指南
它继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统,Linux是许多企业和服务提供商的首选操作系统,用于部署Web服务器、数据库服务器、邮件服务器等。Linux系统具有高效的网络功能和稳定的...
在嵌入式Linux操作系统软件平台上,构建基于Web的步进电机远程控制系统,配置远程控制的基本网络环境,分析研究基于B/S体系结构的远程控制,并设计远程端网页,编写网关接口CGI程序,实现网页数据与服务器Boa的交互...
针对停车场车位管理人员与现场嵌入式Linux车位管理主机的交互需求,讨论了在嵌入式Linux车位管理主机中使用Apache和SQLite构建嵌入式WEB服务器的关键技术和实现过程。
其次详细讨论了嵌入式web服务器boa以及cgic库的移植并建立Boa服务器实现浏览器与嵌入式Web 服务器之间的动态交互。最后通过移植MJPG-streamer 开源软件,实现了嵌入式Web 视频实时监控。该嵌入式监控系统构建灵活,...
利用FTP进行文件传输、Web服务器建立目录浏览界面。Quota控制磁盘空间分配。实现教学资源共享厦学生作业上传两大功能。此外,通过Perl脚本语言。实现了用户账户创建及管理的自动化。以便日常维护。经过某院实际...
以ARM9处理器S3C2440为核心芯片搭建硬件平台,采用嵌入式Linux操作系统为软件开发平台,设计了一种基于B/S模式的嵌入式视频监控系统的设计方案。通过构建流媒体服务器,完成视频数据的采集、压缩、传输和保存。采用...
采用ARM11微处理器SC6410结合485及以太网通信构建了嵌入式Linux上的WEB服务器,实现了对太阳能发电站监测系统的动态数据采集、分析、处理、存储和显示。实际长期运行表明,该系统能够稳定完整地监测现场设备运行状况...
摘要:采用ARM11微处理器SC6410结合485及以太网通信构建了嵌入式Linux上的WEB服务器,实现了对太阳能发电站监测系统的动态数据采集、分析、处理、存储和显示。实际长期运行表明,该系统能够稳定完整地监测现场设备...