返回 科技论文 首页
一种画面同步系统的设计与实现

  摘要:为了更好满足现在会议等场合的需求,通过采用和修改MJPG-streamer开源视频服务器软件的源码。为其添加新的功能模块,实现板端与PC端屏幕同步显示的效果。使得原本多用于视频监控的MJPG-streamer,有新的应用领域。介绍MJPG-streamer的主要插件及其功能并详细给出利用MJPG-streamer画面同步的实现的方法。实验结果表明,该设计可以很好实现屏幕间的同步。
  关键词:嵌入式Linux:MJPG-streamer;同步
  0.引言
  随着计算机网络技术、移动通信技术、多媒体技术的快速发展。人们对产品的体验的要求越来越高。当前公司在进行产品展示时,多进行远距离展示,这样就会增加了公司的成本,并占用了办公室内的空间。且搬移不便。基于此,本文采用了一个开源工程软件,经过修改,设计实现了一种画面同步系统,减小了对投影设备的依赖,同时减少了占地空间,该系统在会展中心、学校、银行、公司等有着广泛的市场和发展前景。
  1.系统总体设计
  该系统是以Codex-A8处理器S5PV210为核心,在嵌入式Linux系统平台下,通过MJPG-streamer的输入插件获取屏幕的数据,然后对所得到的视频数据通过内部总线送到视频服务器MJPG-streamer上,视频服务器经过对图像压缩处理,经过以太网传输出去,远端客户机通过浏览器或者专用软件访问视频服务器,即可在客户端同步显示板端实时画面,系统总体如图1所示。
  2.硬件设计
  系统的硬件系统主要包括三星公司的Codex系列处理器S5PV210、触摸屏、网卡、串口以及内存和NAND Flash存储芯片组成。s5pv210是一款高性能32位RISC微处理器,采用了ARM Codex-A8内核,ARMV7指令集,主频可达1GHz,64/32位内部总线结构,32/32KB的数据/指令一级缓存,512KB的二级缓存,具有低功耗、低成本等优点。网卡选用支持10/100Mbos、小型、电压可变的以太网芯片LAN9220。内存采用DDR2 RAM (K4T1G164)。NAND Flash采用SamsungK9K8G08UOB,SLC结构,大小为1Gx8bit,串口用于开发过程中的调试使用,具体硬件结构如图2所示。
  3.软件设计
  3.1系统软件总体框架的介绍
  本次设计的系统软件从下往上依次为Bootloader,Linux内核,Yaffs文件系统和lVlJPG-streamer视频服务器,其中需要添加必要的设备驱动,系统框图如图3所示。
  Bootloader引导加载程序是系统加电后运行的第一段代码,是在操作系统内核运行之前运行的一小段程序。通过设备的初始化。并建立内存映射空间,为操作系统准备好合适的环境。一般从网上下载的Boofloader,需要通过修改添加对特定硬件的识别、初始化之后。然后经过交叉编译得到可执行文件,通过SD卡或其他方式下载到板子上。
  由于Linux内核是采用模块化设计的一种源码开放的操作系统,所以在选择了触摸屏驱动外,为了缩小编译后内核镜像的大小,本系统里只保留了必需的功能模块,删除了冗余的功能模块,待一切选择好后,就可以执行make命令对内核重新编译,然后就可以在/arm/arch/boot目录下产生一个zlmage文件。
  文件系统可以通过从官网下载有“瑞士军刀”之称的busyboxl-1.6源码编译,然后通过mkyaffs2image工具制作yaffs文件系统,文件系统中包括Linux启动时必要的文件,内核启动后加载lintmrc文件。按照顺序启动各种服务、挂载操作和完成C库的拷贝。
  3.2MIPG-streamer的结构和画面同步的设计
  MJPG-streamer是一个轻量级的视频服务器软件。一个可以从单一输入组件获取图像并传输到多个输出组件的命令行应用程序。MJPG-streamer的源码结构分明,层次清晰。由于它采用模块化的设计方法,所有的工作都是通过它的各个插件完成的,所以软件中只要定义好了各组件(plug-in)的输入、输出以及组件之间的衔接关系,用户就可自行根据对功能的需求,完成自己的设计,本次设计就是通过添加input screen插件来实现画面同步的。
  它有两个最主要并且最常用的组件是input,UVC输入组件和output.http输出组件,input_uvc输入插件用于产生视频数据并将视频数据复制到内存中,output_http输出插件是网站服务器插件,它可以将摄像头采集的视频数据传送到用户浏览器中,其中outputhttp输出插件是一个功能齐全的HTYP1.0的Web服务器,可以根据现有的M-JPEG标准,从一输入插件中获取图像,向客户端浏览器传输ipeg流文件,从而实现从浏览器端访问视频数据的要求。正是由于该开源工程拥有这两个重要的插件,所以该服务器软件多用于视频监控等领域。而在本文中,由于不是使用mJPG―streamer通用的功能,所以input uvc插件用不到,只用到了outpuk http插件。
  另外它还包括input control input file input,testpicture、input_gspcavl、output_autofocus、outpuCfile,out_viewer等组件,具体如图4所示。
  由于MJPG-streamer主函数的定义在mipgstreamer.c文件,在实现了各个输入输出组件后,主函数通过调用各个组件即可完成整个视频采集传输显示的全部过程。以下是本设计中input_screen输入组件各个模块程序设计的具体实现思路。
  (1)int inpuLinit(input-parameter*param)   该函数的功能是通过对输入参数的判断,循环分析输入参数来进行对应的操作,如提示保存所需要的输人参数的信息,设置延时的秒数等。
  (2)int inputrun(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 fvoid。ark)具体实现流程图如下:
  经过上述对MJPG-streamer输入插件input_screen的增加,即可实现画面的同步,然后就是对整个项目的重新编译和移植,具体移植过程不再详述,可参考相关文献。由于编译过程中需要libjpeg.so库,所有需要先移植jpeg库,然后导人环境变量export LIB_PATH=/home/edu/share/install/,进行编译安装。最后把生成的,s0文件拷贝到mjpg目录下。启动视频服务器后,指定服务器的输入/输出组件以及该文件夹的路径,那么客户端会浏览事先存编写好的已存放在/mjpg/www目录下的网页。最后在start.sh启动该服务器即可,修改后的语句如下:
  ./mjpg_streamer-o"output_http.so-p 8000-w"-i”input_screen.so”&
  4.结语
  本文通过研究开源工程MJPG-streamer的结构和源码,在它通用的功能基础上,通过增加input screen输入组件,很好地实现了视频同步。不仅拓展了MJPG-streamer的用途,而且设计了一种简单方便的同步方法,经验证,该系统实现的效果很好,可以用于各种需要演示的场合。效果如图6。

【相关论文推荐】
  • 一种多通道同步串口的设计与实现
  • 一种电力巡检系统的设计与实现
  • 一种属性权威系统的设计与实现
  • 一种整机测试系统的设计与实现
  • 一种车载监控系统的设计与实现
  • 一种短信防伪系统的设计与实现
  • 一种分布式架构下的实时消息同步机制的设计与实现
  • 一种用户注册登录系统设计与实现
  • 一种可重构计算系统设计与实现
  • 在线服务

    服务承诺