开源视频服务器软件MJPG-streamer的研究和应用
2012-07-13陈书益黄永慧
陈书益,黄永慧
(广东工业大学 自动化学院,广东 广州 510006)
“MJPG-streamer”是一个轻量级的视频服务器软件。一个可以从单一输入组件获取图像并传输到多个输出组件的命令行应用程序。
该软件可应用在基于IP协议的网络中,从网络摄像机中获取并传输JPEG格式的图像到浏览器,例如Firefox、Cambozola、Videolanclient,甚至是一个运行了TCPMP播放器的Windows移动设备。
它继承于uvc_streamer,为在RAM和CPU上存在资源限制的嵌入式设备而写的。因为兼容Linux-uvc的摄像机可以直接生成JPEG数据,即使是运行OpenWRT Linux的嵌入式设备也可以快速处理M-JPEG数据流。
这款工具源代码简洁,注释清晰。组件功能明确,衔接清晰。使用Linux C语言进行开发,可移植到不同的计算机平台,也可以在根据GPL v2的条款下进行改进和发行。
1 MJPG-streamer的处理流程
MJPG-streamer主函数的定义在mjpg-streamer.c文件。主函数的处理流程如图1所示。

图1 主函数处理流程图Fig.1 Working process diagram of main function
2 MJPG-streamer的相关组件
MJPG-streamer采用模块化的设计方法,以功能块为单位进行描述,这些功能块被称为plug-in(组件)。软件中定义好了各组件的输入、输出,以及组件之间的衔接关系。用户可自行根据对功能的需求,选择需要的模块。这种模块化的程序设计简化了代码的编写、调试、维护,程序员只需要遵守设计的规范,就可以轻松地改写软件,或者编写新的模块以增强软件的功能[1]。
MJPG-streamer最主要并且最常用的组件是input_uvc输入组件和output_http输出组件。其他组件包括input_control、input_file、input_testpicture、input_gspcav1、output_autofocus、output_file、out_viewer,如图 2 所示。

图2 MJPG-streamer的组件体系Fig.2 The plug-in system of MJPG-streamer
2.1 input_uvc输入组件
input_uvc组件的主要功能是获取摄像头拍摄的图像并将其压缩编码,共包括5个组件接口函数,这些组件接口函数是各个组件提供给外部使用的接口。……
