【VC++开源代码栏目提醒】:网学会员为广大网友收集整理了,嵌入式Linux的web视频服务器的构建 - 互联网,希望对大家有所帮助!
嵌入式Linux的web视频服务器的构建 随着嵌入式处理器和
开源Linux的广泛应用各种视频服务在嵌入式系统中逐渐发展起来。
1.引言 随着多媒体技术、视频压缩编码技术、网络通讯技术的发展数字视频服务器逐渐发展起来。
近年来随着嵌入式处理器和
开源Linux的广泛应用视频服务已逐渐与嵌入式相结合。
本文提出了一种嵌入式web视频服务器的构建方法该系统以嵌入式Linux和S3C2440为核心平台在这个平台上构建web服务器和视频服务器客户可以直接通过浏览网页的方式观看视频。
2.视频采集传输模块的构建 本系统采用的硬件平台是基于ARM920T架构的嵌入式开发板S3C2440CPU主频400MHz该开发板集成了64MB 32位的SDRAM和64MB的NANDFLASH三个USB host口3路UART4路DMA一个采用CS8900Q3以太网控制芯片的10M网络接口等。
摄像头采用中星微301芯片的USB摄像头。
本系统软件部分由视频采集传输模块和web服务器组成。
2.1视频采集模块 在进行视频采集前需要先安装驱动video4Linux是Linux中关于视频设备的内核驱动它为针对视频设备的应用程序编程提供统一的编程接口。
本系统的S3C2440开发板自带的是Linux 2.6.12内核该内核编译时已加进关于视频设备的内核驱动Video4Linux1。
使用video4Linux进行采集视频的流程图如图1。
1设备的初始化 调用open打开设备利用ioctl对设备进行控制比如设置对比度、亮度、调色板访问模式等等。
主要
代码如下 int fdopen/dev/v4l/video0O_RDWR//打开设备 ioctlvd-fdVIDIOCGCAPvd-capability 2采集图像 本系统使用内存映射的方式采集图像线程采集函数grab主要
代码如下 vd-pFramebufferunsigned charmmap0vd-videombuf.sizePROT_READPROT_WRITEMAP_SHAREDvd-fd0 for ifioctlvd-fdVIDIOCMCAPTUREvd-vmmap0 perrorvidiocmcapture errorn erreur-1 ifioctlvd-fdVIDIOCSYNCvd-vmmap.frame0 perrorvidiocsync errorn erreur-1 然后在main函数中创建采集线程pthread_createw1NULLvoidgrabNULL该线程一直运行不断采集图像数据同时把数据放到缓冲区内发送线程从缓冲区读取视频数据。
2.2视频传输模块 本系统支持多个客户同时访问所以为每个连接的客户端创建一个线程专门负责与客户端进行数据交互。
首先调用socket创建套接口然后bind绑定7000端口到该套接口调用listen监听该套接口等待客户端的连接最后调用accept与客户端建立连接。
视频传输模块的流程如图3 下面给出创建线程的关键
代码 whilesignalquit//如果没有退出信号就一直运行下去 ifnew_sockacceptserv_sockstruct sockaddrtheir_addrsin_size-1 continue pthread_createserver_thNULLvoidservicenew_sock 线程函数server主要是读缓冲区数据写入套接口同时读取套接口的数据设置下一次采集图像的属性这里就不再给出
代码。
3.嵌入式web服务器 嵌入式web服务器就是把web服务器移植到嵌入式系统的服务器。
它仍然是基于http文本协议进行通信的具有标准的接口形式对客户端来说访问嵌入式web服务器就和访问普通的web服务一样。
Boa是一个小巧的web服务器可执行
代码只有70KB占用的系统资源少速度快安全性能高本系统采用的就是boa服务器下载源码解压后需要修改makefile文件把其中变量CC的值改成arm-linux-gccLD改成arm-linux-ld然后make就可以生成boa应用程序了下载boa和boa.conf到开发板上然后根据开发板文件系统修改boa.conf配置文件比如日志路径web根目录等把web页面放入根目录boa通过读取配置文件里的根目录内容就可以返回用户请求的web页面了。
本系统的Web页面用HTML语言设计如果想通过该web页面传输视频数据需要一 个applet小程序7该程序通过HTML语言中的applet标记引入下面是引入applet程序的
代码 applet codebase.archiveJWebcamPlayer.jarcodeJWebcamPlayer.class nameJWebcamPlayerIDJWebcamPlayeraligncenterwidth400height400 MAYSCRIPT param nameColorvalueffffff param nameServervalue param namePortvalue7000 PARAM NAMEscriptablevaluetrue PARAM NAMEmayscriptvaluetrue /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等开发语言所以企业组织开发团队时可根据自身的研发力量灵活决策以较小的人力资源投入获得较高的收益。
MSN空间完美搬家到新浪博客