一种画面同步系统的设计与实现

2015-05-15 03:19姜利英梁茂岳保磊孔令春
现代计算机 2015年7期
关键词:源码内核线程

姜利英,梁茂,岳保磊,孔令春

(1.郑州轻工业学院电气信息工程学院,郑州 450002;2.北京凌阳爱普科技有限公司,北京 100085)

一种画面同步系统的设计与实现

姜利英1,梁茂1,岳保磊1,孔令春2

(1.郑州轻工业学院电气信息工程学院,郑州 450002;2.北京凌阳爱普科技有限公司,北京 100085)

为了更好满足现在会议等场合的需求,通过采用和修改MJPG-streamer开源视频服务器软件的源码,为其添加新的功能模块,实现板端与PC端屏幕同步显示的效果。使得原本多用于视频监控的MJPG-streamer,有新的应用领域。介绍MJPG-streamer的主要插件及其功能并详细给出利用MJPG-streamer画面同步的实现的方法。实验结果表明,该设计可以很好实现屏幕间的同步。

嵌入式Linux;MJPG-streamer;同步

0 引言

随着计算机网络技术、移动通信技术、多媒体技术的快速发展[1],人们对产品的体验的要求越来越高。当前公司在进行产品展示时,多进行远距离展示,这样就会增加了公司的成本,并占用了办公室内的空间,且搬移不便。基于此,本文采用了一个开源工程软件,经过修改,设计实现了一种画面同步系统,减小了对投影设备的依赖,同时减少了占地空间,该系统在会展中心、学校、银行、公司等有着广泛的市场和发展前景。

1 系统总体设计

该系统是以Cortex-A8处理器S5PV210为核心,在嵌入式Linux系统平台下,通过MJPG-streamer的输入插件获取屏幕的数据,然后对所得到的视频数据通过内部总线送到视频服务器MJPG-streamer上,视频服务器经过对图像压缩处理,经过以太网传输出去,远端客户机通过浏览器或者专用软件访问视频服务器[2],即可在客户端同步显示板端实时画面,系统总体如图1所示。

图1 系统总体框图

2 硬件设计

系统的硬件系统主要包括三星公司的Cortex系列处理器S5PV210、触摸屏、网卡、串口以及内存和NAND Flash存储芯片组成。s5pv210是一款高性能32位RISC微处理器,采用了ARM Cortex-A8内核,ARM V7指令集,主频可达1GHz,64/32位内部总线结构,32/ 32KB的数据/指令一级缓存,512KB的二级缓存[3],具有低功耗、低成本等优点。网卡选用支持10/100Mbps、小型、电压可变的以太网芯片LAN9220,,内存采用DDR2 RAM(K4T1G164),NAND Flash采用Samsung K9K8G08U0B,SLC结构,大小为1Gx8bit,串口用于开发过程中的调试使用,具体硬件结构如图2所示。

图2 硬件结构图

3 软件设计

3.1 系统软件总体框架的介绍

本次设计的系统软件从下往上依次为Bootloader, Linux内核,Yaffs文件系统和MJPG-streamer视频服务器,其中需要添加必要的设备驱动,系统框图如图3所示。

图3 整体结构框图

Bootloader引导加载程序是系统加电后运行的第一段代码,是在操作系统内核运行之前运行的一小段程序,通过设备的初始化,并建立内存映射空间,为操作系统准备好合适的环境[4]。一般从网上下载的Bootloader,需要通过修改添加对特定硬件的识别、初始化之后,然后经过交叉编译得到可执行文件,通过SD卡或其他方式下载到板子上。

由于Linux内核是采用模块化设计的一种源码开放的操作系统,所以在选择了触摸屏驱动外,为了缩小编译后内核镜像的大小,本系统里只保留了必需的功能模块,删除了冗余的功能模块,待一切选择好后,就可以执行make命令对内核重新编译,然后就可以在/ arm/arch/boot目录下产生一个zImage文件。

文件系统可以通过从官网下载有“瑞士军刀”之称的busybox1-1.6源码编译,然后通过mkyaffs2image工具制作yaffs文件系统,文件系统中包括Linux启动时必要的文件,内核启动后加载linuxrc文件,按照顺序启动各种服务、挂载操作和完成C库的拷贝。

3.2 MJPG-streamer的结构和画面同步的设计

MJPG-streamer是一个轻量级的视频服务器软件。一个可以从单一输入组件获取图像并传输到多个输出组件的命令行应用程序[5]。MJPG-streamer的源码结构分明,层次清晰,由于它采用模块化的设计方法,所有的工作都是通过它的各个插件完成的,所以软件中只要定义好了各组件(plug-in)的输入、输出以及组件之间的衔接关系,用户就可自行根据对功能的需求,完成自己的设计,本次设计就是通过添加input_screen插件来实现画面同步的。

它有两个最主要并且最常用的组件是input_uvc输入组件和output_http输出组件,input_uvc输入插件用于产生视频数据并将视频数据复制到内存中,output_http输出插件是网站服务器插件,它可以将摄像头采集的视频数据传送到用户浏览器中[6],其中output_ http输出插件是一个功能齐全的HTTP1.0的Web服务器,可以根据现有的M-JPEG标准,从一输入插件中获取图像,向客户端浏览器传输jpeg流文件,从而实现从浏览器端访问视频数据的要求。正是由于该开源工程拥有这两个重要的插件,所以该服务器软件多用于视频监控等领域。而在本文中,由于不是使用MJPG-streamer通用的功能,所以input_uvc插件用不到,只用到了output_http插件。

另外它还包括input_control、input_file、input_testpicture、input_gspcavl、output_autofocus、output_file, out_viewer等组件,具体如图4所示。

图4 MJPG-streamer结构框图

由于M JPG-streamer主函数的定义在mjpg_ streamer.c文件,在实现了各个输入输出组件后,主函数通过调用各个组件即可完成整个视频采集传输显示的全部过程。以下是本设计中input_screen输入组件各个模块程序设计的具体实现思路。

(1)int input_init(input-parameter *param)

该函数的功能是通过对输入参数的判断,循环分析输入参数来进行对应的操作,如提示保存所需要的输入参数的信息,设置延时的秒数等。

(2)int input_run(void)

该函数创建了一个工作线程worker_thread线程,该线程实现了rgb24格式图片到JPEG格式图片的转换,以方便视频画面的传输和显示,具体工作流程见下文。最后使用pthread_deatch函数回收线程序资源。

(3)int input_stop(void)

该函数通过调用pthread_cancel(worker)取消图片格式转换的工作线程,回收线程资源,节省内存空间。

(4)int input_cmd(int in_cmd_type cmd,int value)

该函数的功能为对屏幕参数的调整和控制,通过对参数的判别,增加或减小获取到的屏幕的数据。

其中第二步里的线程函数worker_thread(void*arg)具体实现流程图如下:

图5

经过上述对MJPG-streamer输入插件input_screen的增加,即可实现画面的同步,然后就是对整个项目的重新编译和移植,具体移植过程不再详述,可参考相关文献。由于编译过程中需要libjpeg.so库,所有需要先移植jpeg库,然后导入环境变量export LIB_PATH=/ home/edu/share/install/,进行编译安装,最后把生成的.so文件拷贝到m jpg目录下。启动视频服务器后,指定服务器的输入/输出组件以及该文件夹的路径,那么客户端会浏览事先存编写好的已存放在/m jpg/www目录下的网页,最后在start.sh启动该服务器即可,修改后的语句如下:

4 结语

本文通过研究开源工程MJPG-streamer的结构和源码,在它通用的功能基础上,通过增加input_screen输入组件,很好地实现了视频同步。不仅拓展了MJPG-streamer的用途,而且设计了一种简单方便的同步方法,经验证,该系统实现的效果很好,可以用于各种需要演示的场合。效果如图6。

图6

[1] 许青,刘方.基于ARM9的室内无线监控报警系统设计与实现[J].电子科技,2013,26(2):103

[2] 于艳萍,朱晓智,王中训.基于ARM9和USB摄像头的网络视频采集系统设计[J].现代电子技术,2011,34(24):50

[3] 三星处理器芯片手册

[4] 杨阔,何东健.基于S3C6410的田间视频监控系统的实现[J].计算机工程与设计,2013,34(6):1979

[5] 陈书益,黄永慧.开源视频服务器软件MJPG-streamer的研究和应用[J].电子设计工程,2012,20(5):172

[6] 杨宏,张志文.基于Web的嵌入式远程监控系统的研究与实现[J].计算机与数字工程,2012,10:72

Design and Implementation of Screen Synchronous System

JIANG Li-ying1,LIANG Mao1,YUE Bao-lei1,KONG Ling-chun2,
(1.Institute of Electrical Engineering,Zhengzhou University of Light Industry,Zhengzhou 450002;2.Beijing Sunplusapp Technology Co.Ltd.,Beijing 100085)

In order to bettermeet the requirements of presentmeeting,modifies the MJPG-streamer open source video server s of tware and source code,adds new modules for the realization of the plate,tomake the screen synchronization display of terminal and PC.Makes the new use for videomonitoring of MJPG-streamer.Introduces themain plug-ins and their functions and themethod of screen synchronization, the experimental results show that the design is very good to achieve the synchronization between the screens.

Embedded Linux;MJPG-streamer;Synchronous

1007-1423(2015)07-0065-04

10.3969/j.issn.1007-1423.2015.07.018

姜利英(1981-),女,河南郾城人,博士,副教授,研究方向为生物传感器及检测微系统

梁茂(1988-),男,河南固始人,硕士,研究生,研究方向为单片机及嵌入式系统

2014-10-20

2015-02-10

岳保磊(1987-),男,河南驻马店人,硕士,,研究方向为生物传感器、单片机检测微系统

孔令春(1984-),男,江苏南京人,工程师,研究方向为视音频、嵌入式系统

猜你喜欢
源码内核线程
多内核操作系统综述①
面向数据可靠传输的高译码率带反馈的LT码
强化『高新』内核 打造农业『硅谷』
基于C#线程实验探究
国内一站式工程设备租赁平台众能联合完成C2、C3两轮融资
活化非遗文化 承启设计内核
浅谈开源操作系统的历史
企业如何保护源码
基于国产化环境的线程池模型研究与实现
线程池调度对服务器性能影响的研究*