2024年5月29日发(作者:)

基于Mj pg-streamer的轻量级无线图传系统设计 

唐文莹,张海峰 

(杭州电子科技大学电子信息学院,杭州310018) 

摘要:提出了基于开源视频处理软件Mjpg—streamerh和嵌入式处理器¥3C6410的无线图传系统,并设计了一种快速 

YUV2RGB转换算法;通过修改Mjpg—streamer源码并交叉编译后移植到嵌入式设备中,实现了视频图像采集和传输的 

功能,并设计了用于显示图传画面的安卓客户端。实验结果表明,该系统可以很方便地用于无人机图传或无线视频监控 

方案,并可以在安卓手机端流畅地播放视频画面。 

关键词:Mjpg—streamer;¥3C6410;YUV2RGB;无线传输;移动终端 

中图分类号:TP3¨.1 文献标识码:A 

Light Wireless Image Transmission System Design Based on Mjpg-streamer 

Tang Wenying,Zhang Haifeng 

(College of Eletronic Information,Hangzhou Dianzi University,Hangzhou 310018,China) 

Abstract:In the paper,the light wireless image transmission system based on Mjpg-streamer and¥3C6410 is proposed,and a fast 

YUV2RGB conversion algorithm is designed.The MjPg—streamer source is transplanted into the embedded system after modifying and 

cross—compiling,then the functions of video capture and transmission are realized.The Android client is used to display the video images. 

The experiment results show that the system can be easily used in unmanned aerial vehicle image transmission or wireless video monito— 

ring scheme,and can display the video image smoothly in the Android termina1. 

Key words:Mjpg~streamer;¥3C6410;YUV2RGB;wireless transmission;mobile terminal 

组成: 

引 言 

无线图传系统在安防监控、机器人技术以及机器视觉 

等领域均有广泛的用途,应用于嵌入式设备的无线图传系 

统需要满足硬件资源消耗少、便携、图像清晰、带宽占用率 

低等条件。Mjpg—streamer是轻型的视频处理软件,可应 

用在基于IP协议的网络中,从图像采集设备中获得格式 

①视频采集模块,由UVC摄像头和USB接口组成。 

摄像头选用HP 720P高清网络摄像头,分辨率为1280× 

720P,100万像素,输出视频格式为MJPG或YUY2,具有 

体积小、免驱动、即插即用、价格低廉的优点。该模块完成 

了将摄像头采集到的图像数据以JPEG格式通过USB接 

口传输给ARM开发板的功能。 

②视频图像处理模块,对图像数据的处理主要由 

¥3C6410开发板和视频流服务器软件Mjpg—streamer来完 

成。该模块主要完成了图像的编码、打包及发送功能。 

③视频图像传输模块,主要功能是在无线局域网中 

将经过处理器处理的数据利用无线网卡传送给客户端。 

④安卓客户端,用于连接到服务器以及浏览视频图 

为JPEG的视频数据,并以流的形式传送到接收端,使用 

者通过输入视频服务器地址和端口号,就能方便地获得图 

像。图传系统资源消耗的主要部分是色彩空间转换和图 

像压缩,在对比了三种常用的YUV2RGB算法后,设计了 

种适用于嵌入式设备的快速算法。针对Mjpg—streamer 

数据传输方式设计的客户端MjpgClient,可以运行于任意 

Android 4.0以上设备,具有界面友好、操作简便、图像清 

晰、画面流畅等特点。 

像。系统设计如图1所示。 

1 系统设计与组成 

本设计采用了将嵌人式视频处理软件Mjpg—streamer 

和安卓客户端相结合的方法,提出了一种基于c/s(客户 

2 Mjpg—streamer源码分析 

2.1 V4L2视频采集流程 

视频采集应用程序编程接口V4L(Video for Linux) 

是Linux内核里支持影像设备的一组API函数,V4L2是 

端/IlK务器)架构的无线图传系统。系统主要由4个模块 

敬请登录网站在线投稿 

2017#-g 7期 《牟 机 嵌入式彖碗应用》 27 

所需的模块,具有高内聚、低耦合的优点。MjPg~ 

视 

EMMC 

streamer最常用的输入组件为针对UVC(USB 

video cl

ass) 

u 

删 

(SAND lfash) 

DArA 

SPI 

r 

u 』\ 

2.3一

AP 

input

UVC输入组件 

input

TFCard 

UVC输入组件主要完成的工作是获取 

摄像头拍摄的图片并将其进行压缩编码,共包括 

GP10 

面 (USB3503) 

USB 

WIFI 

II l 5个组件接口函数与其他接II=1衔接。input—run 

函数是输入通道的运行函数,利用pthread

UsetKev 

cre一 

Power Management(S5M8767) 

图1 无线图传系统结构 

 .

ate函数建立工作线程,调用cam—thread抓取摄 

像头采集的一帧图像并进行格式转换,等待线程 

执行完毕后,调用pthread—detach函数回收线程 

V4L的第2个版本,与V4L相比,它在扩展性和灵活性方 资源。其中抓图线程cam—thread的执行流程如图4 

所示。 

面得到了很大的提高,并且可以支持更多的硬件设备,已 

成为Linux2.6下的标准接口。但由于它在V4L的基础 

上改动很大,所以与 

I鱼全堑童垫堡堑I 

V4L并不兼容,V4L2 

的操作更加简单直观。 

V4L2的驱动结构分为 

两层:上层为videodev 

打开视频设备 

获取视频设备信息 

匝 囹—— 

读取映射缓冲信息,建立内存映射 

读取用户控制信息,设置参数 

捕获视频帧数据 

N 

臣 圃一l执 蒡法I 

臣 口一I执 蒡法I 

臣input_gspcav1.so]uvc摄像头『,国 

 

模块,下层为V4I 2驱 

动程序。V4L2视频采 

集操作流程如图2所 

示 。 Mjpg—streamer 

厂 {lE 

的视频采集和参数设置 

程序遵循了V4L2打开 

视频设备、设置图像格 

式、数据处理、关闭设备 

的基本操作流程。 

关闭视频设备 

图2 V4L2视频采集操作流程 

噩o[ 回 {utput htp.so I垒j ,F国-z1 

匝outpu画t_autofocus.so] 固 

图3 Mlpg—streamer的软件架构 

2.3.2 output

http输出组件 

2.2 Mjpg—streamer软件架构 

Mjpg-streamer采用模块化设计,以模块为单位进行 

功能设计和行为描述,这些功能模块被称作组件(plu— 

output

http输出组件主要完成的工作为创建http服 

gins),其架构主要分为三部分:主线程mjPg—streamer.C、 

输入组件input和输出组件output。其中主线程主要实现 

务器线程、以socket套接字形式将视频数据发送出去,并 

创建客户端线程、定义服务器对客户端请求的响应。服务 

器线程server—thread被定义在httpd.C中,由output—ht~ 

了对命令行参数的解析以及调用子线程运行各组件的功 

能函数。在mjPg—streamer.h头文件中定义了一globals结 

构体,该结构体声明了存放一帧JPEG数据的容器*buf、 

输入组件input和输出组件output 。Mjpg—streamer的 

软件架构如图3所示。 

tp.c的output—run函数创建,作用是打开一个TCP socket 

套接字并等待客户端连接。如有客户端连接,则为每一个 

连接到服务器的客户端创建一个client—thread,服务于该 

客户端,设置可同时监听1O个客户端。客户端线程 

client

2.3 相关组件 

Mjpg—streamer的组件分为输入组件input和输出组 

thread的主要工作为接收客户端发送的请求并进行 

件output,程序中定义好了各个组件的输入、输出以及组 

件之间的衔接关系,用户可以根据需求方便地选择、删改 

解析,根据请求类型作出相应操作。客户端接收的请求类 

型如表1所列。 

2 8 Microcontrollers&Embedded Systems 20 1 7年第7期 WwW.mesnet.com.cn 

度值。 

开始 

N 

经矩阵运算的转换公式如下: 

R—Y+lI 4075×(cb一128) ] 

(2) G—Y一0.3455×(Cr一128)一o.7169×(Cb一128) 

B—Y+1.779×(cb一128) 

obal一>stop 

厂一 

获取一帧数据uvcGrab 

J 

3.1 整型算法 

有效视频数据?=视频 ==> 

\/ 

由于YUV2RGB的转换会涉及到浮点运算,为了进 

行快速转换,可以通过移位将浮点运算变为整型运算 。 

算法设计如下: 

u—YUVdata[UPOS]一128; 

v—YUVdata[VPOS]一128: 

rdif—v+((v*103)>>8); 

Y‘ 

上锁全局缓冲区 l (结束 

< 竺苎 

YP————一 

< Y

Y1rⅣ转成RGB 

RGB压缩成JPEG 

行++ 

检索帧起始 

标记0xFFC0 

invgdif一((u*88)>>8)+((v*183)>>8); 

bdif—U+((u*198)>>8); 

rE YUVdata[YPOS]+rdif; 

g—YUVdata[YPOS]一invgdif; 

b—YUVdata[YPOS]+bdif; 

Huffmana ̄ 

插入 

对计算结果进行判断,防止溢出: 

if(r>255) r一255; 

if(r<O) r一0; 

通知所有线程有一帧数据 

从RGB24格式到RGB565格式的转换如下: 

RGBdata[1]一((r 8L 0xFS)1(g>>5)); 

RGBdata[0]一(((g 8L 0xlC)<<3)l(b>>3)); 

解锁全局缓冲区 

图4抓图线程cam—thread执行流程 

3.2部分查表法 

除了使用公式实现YUV2RGB的转换,还可以使用 

查表法,查表法分部分查表法和完全查表法。部分查表法 

表1 客户端请求类型 

req.type—A

SNAPSHOT 拍照请求 

视频流请求 

是指将算法中一些复杂的运算直接通过数据之间的映射 

关系得到,而保留较为简单的运算。将上述算法中的乘法 

用部分查表法代替,可以加快处理速度 。 

算法改进如下: 

rdif—fac

req.type—A

req.type—A

STREAM 

COMMAND 执行客户端指定命令,并发送反馈信息 

req.type—A

FILE 文件请求 

4075[u]; 

rn

invgdif—fac

3455[u]+fac—m一0—7169[v] 

3 YUV2RGB快速转换算法设计 

bdif—fac

779[u]; 

3.3完全查表法 

完全查表法是根据YUV与RGB数据的映射关系,直 

接通过查表得到对应的RGB值,但以最复杂的G分量为 

例,由于G与Y、U、V三种分量都有联系,如G—YUV2G 

[Y][U][V]运算,需要用到下标均为255的三维数组,约占 

16 MB空间,内存消耗过大。对于G分量,实际上能通过 

二次查表法,将其运算简化为对两个二维数组的操作 ]: 

『L lcC三 Lrb] .lI =—=『l1 -0。:. 5i1i0 60。87 二一.。0‘ :43 138173 —一。0 .5 0 8401 3]jl1 [L lG薹B L]l +—『lI 1 28] lI 

敬请登录网站在线投稿 

G—yig2g

table[y][uv2ig—table[u]Evil; (3) 

而R分量和B分量本身就只与Yu分量或YV分量相关, 

共需4个8×8的二维表,占4×2“一256 KB内存空 

间_6。]。由于在嵌入式设备中,数据最终会被转换成 

RGB565格式,用于显示在LCD屏上;根据完全查表法可 

2017年第1期 《平谤机 嵌入式系碗应用》 29 

。 

以将描述RGB的8位(0~255)精度简化为高6位的数 

据,所以可以将转换映射表改为4个6×6的二维表,占用 

16 KB内存,加快运算速率,降低内存消耗。 

最终设计的优化YUV2RGB快速转换算法如下: 

y一(YUVdataEY1POs]>>2); 

U一(YuVdata[uPos]>>2); 

v一(YUVdata[VPOS]>>2); 

r—yv2r

table ̄y][v]; 

(开始) 

+ 

LoginActivity 

+ 

初始化控件 

l 

● 

设置exit按钮 

点击事件 

● 

设置connect按钮 

点击事件 

I MainActivity 

+ 

找到自定义控件 

. MjpegView 

● 

 ̄tMjpegView 

数据源 

● 

SurfaceCreated: 

g:yig2g

table,y3[uv2ig~table[u][v]]; 

table[y][u]; 

退出程序 

l 

通过A c 缸k 

建立连接线程 

● 

● 

SurfaceView被创建 

+ 

启动渲染线程 

b—yu2b

MjpegViewThread 

RGBdata[-1]一((r&0xF8)I(g>>5)); 

RGBdata ̄0]一(((g&oxlc)<<3)I(b>>3)); 

(结 束) 创建http客户端 。 

● 

进行http连接 。 

●一 

解析htq)数据包 

● 

4 Android客户端设计及系统测试 

4.1 Android客户端设计 

针对Mjpg—streamer的数据发送模式,设计了An— 

droid客户端MjpgClient,用于连接到视频服务器并浏览 

视频画面。软件架构如图5所示。 

 .

+ 获取一帧数据 

设詈M ~蔚 鞠 oe ̄InoutStrea… m 

● 

执行完毕,跳转 

 ̄lJMainActivity 

. 

+ 

生成位图并返回 

给MjpegView 

● 

l 

MjpegClient执行流程 

4.2系统测试 

硬件平台方面,摄像头选用 

HP 720P高清网络摄像头,分辨率 

为1280×720P,100万像素,输出视 

频格式为MJPG或YUY2;网卡选 

用EOUP 2.4G USB无线网卡,带 

宽为300 Mbps;视频服务器选用 

ARMl1开发板,CPU为¥3C6410, 

主频700 MHz,内存512 MB。软件 

平台方面,视频服务器平台操作系 

图5客户端软件架构 

统为基于Debian GUN/Linux的原 

程序设计了三个包:Activity、IO和View。其中Ac— 

tivity包用于存放登录界面LoginActivity和主界面Main— 

Activity;IO包中的Mj pegInputStream类继承了DataIn— 

putStream类,实现了Serializable接VI,用于获取视频流, 

生系统Raspbian;视频服务器软件为mjpg—streamer—r63; 

客户端手机操作系统为Android 4.2.2,APP为MjpegCli— 

ent。实验步骤如下: 

①根据软件平台修改Mjpg-streamer源码,移植到开 

发板中并编译通过; 

②编写自启动脚本,修改/etc/rc.1ocal文件,实现 

Mjpg—streamer开机自启动; 

并进行数据解析;View包中的MjpegView类继承了Sur— 

faceView类,实现了SurfaceHolder.Callback接口,用于获 

取一帧图像并显示在画布Canvas上。程序设计了两个主 

要的工作线程:继承于异步任务AsyneTask的Connect— 

③打开手机热点,设置开发板为固定IP并指定连接 

的热点; 

④打开手机端的APP—MjpegClient,输入视频服务器 

IP地址和端口号,按下connect按钮控件,即可浏览视频 

画面。实测效果如图7所示。 

Task,用于创建http客户端与视频服务器连接、获取输人 

流并通过按钮实现Activity的跳转;继承于Thread、服务 

于MjpegView的渲染线程MjpegViewThread,用于抓图 

和显示视频画面。程序的执行流程如图6所示。 

3 0 Microcontrollers&Embedded Systems 20 1 7年第7期 wWw.mesnet.com.crl 

动、低能耗方向发展。Mjpg-streamer作为一个经典的开源 

视频服务器软件,其代码架构、功能设计在以MPEG一4、 

H.264或H.265为压缩标准的视频处理程序中都有很高 

的参考价值。YUV2RGB快速转换算法的设计进一步提升 

了视频图像处理的速度,移动终端的开发让浏览图像画面 

更加方便。_E 

机端界面 (b)无线圈传系统 (c)系统在无人机中的应用 

参考文献 

[1]刘登诚,沈苏彬.嵌入式Linux设备驱动程序开发技术的研 

究[D].南京:南京邮电大学.20I1:48—65. 

图7 无线圈传系统实测 

实测数据如表2所列。 

表2 无人机中图传系统测试环境与测试结果 

飞行高度/m 

测试无人机参数 飞行直线距离/m 

飞行速度/(kin/h) 

无线传输标准 

O~5O 

5~2OO 

0~10 

IEEE802.11i"1 

[2]周鹏飞,潘地林.基于MJPG-Streamer的移动视频监控系统 

的设计与研究[D].淮南:安徽理工大学,2O1 3:36—42. 

[33 H NOBUHARA。K HIRO FA,F DIMARTINO,et a1.Fuzzy 

Relation Equations for Compression/Decompression Proees— 

ses of Colour Images in the RGB and YuV Colour Spaces ̄J]. 

Fuzzy()ptimization and Decision Making,2005(4):235—246. 

r4]YIYUN YAN,HUID()NG DAI,XIN( I()NG I IU.et a1. 

Colored adaptive compressed imaging with a single photodi— 

无线传输参数 发射功率/mw 

发射端传输速度/Mbps 

1O0 

1 5O 

ode[J].Applied Optics,201 6.55(14):3711—3718. 

[5]冯永超,罗敏,贺贵明.一种快速YuV—RGB彩色空间变换 

方法[J].微型机与应用,2002(7):59~60. 

E63刘小龙,何勇.基于无人机遥感平台图像采集处理系统的研 

究[D].杭州:浙江大学.201 3:60—63. 

[7]陈坤,苏韩松.微型无人机图像传输系统研究[D].天津:天津 

大学,2O1i:10—15. 

传输图像帧率/fps 

传输图像分辨率 

25 

640×480 

图像相关参数 传输图像格式 

摄像头图像格式 

图像传输协议 

直线传输距离/m 

延时/ms 

JPEG 

YUV 

TCP/IP 

150 

<50 

[8]肖征字,郑耀,宋广华.无人机地面站软件的设计与实现[D]. 

杭州:浙江大学,2Ol0:3—5. 

测试结果 丢包率/ 

占用带宽 

网像清晰度 

0.1 

7.68M 

良好 

[9]陈书益,黄永慧.开源视频服务器软件MJPG—streamer的研 

究和应用[J].电子设计_T程.201 2,20(5):1 72—1 76. 

唐文莹(在读硕士研究生),主要研究方向为嵌入式系统应用;张海 

峰(副教授),主要研究方向为智能仪器设备。 

语 

轻量级无线图传系统在安防、探测、救援等多种场合都 

为广泛的应用.系统的设计也将向高清、低带宽、可移 

(责任编辑:薛士然 收稿日期:2016一O7—14) 

[2]章玲.基于手机蓝牙控制的LED广告屏设计[J].机 

电技术,2O13(8). 

[J].电子技术。2009(2):19—22。 

[9]Joshua Bloch.Effective Java ̄M].2版.杨春花,俞黎敏,译. 

北京:机械工业出版社,2009. 

娟.基于蓝牙技术的无线数据包采集系统的没计[J].微计 

机信息,2008(24):2. 

这霄.基于单片机的蓝牙接口设计及数据传输的实现[D].北 

[10]谭浩强.c程序没计[M].4版.北京:清华大学出版社, 

2010:142—1 65. 

北京交通大学.2008. 

[11]翟震,张春玲.用74HC595芯片驱动LED的电路设计[J]. 

机床与液压,2004.151(12):15l一152. 

历战社.基于蓝牙技术的数据传输[D●.西安:西安科技大学,2005. 

浩瑜,唐荣斌.Android设备与STM32单片机通信方式的 

开究[J].通信设计与应用,2014(1 1). 

射景明.Android移动开发教程[M].北京:人民邮电出版社。 

:013. 

邓高旭、王一呜(在读研究生),研究方向为嵌入式应用与研究;邓琛 

(教授),研究方向为数字信号处理与智慧交通等。 

(责任编辑:薛士然 收稿日期:2016-07一o4) 

葺霞.基于单片机的I ED汉字显示屏的设计与Proteus仿真 

请登录网站在线投稿 

2017年第7期 《平 机 嵌入式彖诧应同》 3 1