一:概述
1、MJPG-Streamer介绍
(1)Mjpg‐streamer是一个开源软件,用于从摄像头采集图像,它将JPEG帧从一个或多个输入插件复制到多个输出插件。它可用于通过基于IP的网络将JPEG文件从网络摄像头流式传输到各种类型的查看器,如Chrome,Firefox,Cambozola,VLC,mplayer和其他能够接收MJPG流的软件。
(2)它最初是为嵌入式设备编写的,在RAM和CPU方面资源非常有限。其前身“uvc_streamer”的创建是因为Linux-UVC兼容相机直接生成JPEG数据,即使是运行OpenWRT的嵌入式设备,也可以实现快速和流畅的M-JPEG流。输入模块“input_uvc.so”从连接的网络摄像头捕获这样的JPG帧。mjpg-streamer现在支持各种不同的输入设备
2、JPEG、MJPG介绍
JPEG
- 简称JPG
- 上过美术课的人都知道一个象素的颜色可以用RGB三原色来表示,其实还可以用YUV格式来表示
- 使用RGB、YUV的格式编码的照片,文件都很大,比如常见的BMP文件就是用RGB编码
- 把一个BMP文件转换为JPEG文件,可以发现图片质量没发生变化,但是文件变小了很多
- JPEG是根据人体视觉的特点采用了YCbCr格式,大大压缩了照片的大小
MJPG
- Motion JPEG,简称MJPG
- JPEG是静态图片的编码格式,MJPG是动态的视频编码格式
- 可以简理解:MJPG就是把多个JPEG图片连续显示出来
MJPG优点
- 很多摄像头本身就支持JPEG、MJPG,所以处理器不需要做太多处理
- 一般的低性能处理器就可以传输MJPG视频流
MJPG缺点
- MJPG只是多个JPEG图片的组合,它不考虑前后两帧数据的变化,总是传输一帧帧图像:传输带宽要求高
- H264等视频格式,会考虑前后两帧数据的变化,只传输变化的数据:传输带宽要求低
二:编译MJPG-Streamer
mjpg-streamer的移植需要jpeg的库,所以我们先移植jpeg的库 ,即需要libjpeg
1、jpeg编译
- ./configure --host=arm-himix100-linux --prefix=/home/zhaotiejun/tools/output-files --enable-shared --enable-static
- make
- make install
2、mjpg-streamer编译
下载源码地址:https://sourceforge.net/projects/mjpg-streamer/
(1)其解压目录中有:doc mjpeg-client mjpg-streamer mjpg-streamer-experimental udp_client uvc-streamer
mjpg-streamer :目录下提供了 的执行程序和各个输入输出设备组件
uvc-streamer :目录下提供了 uvc-streamer的可执行目录
mjpeg-client:分别有 linux和windows 的客户端
(2)修改顶层目录mjpg-streamer下的Makefile
(3)修改上文配置文件中用到的input.uvc和output_http插件对应的Makefile
input.uvc:
output_http:
(4)提前在Makefile的指定生成路径/home/zhaotiejun/tools/files/mjpg-streamer/mjpg-streamer-code-r182/output中创建一下三个文件夹
- make
- make install
至此input*.so、 output*.so 和 mjpg_streamer 可执行文件均已生成。
三:运行测试
1、将生成的bin、lib、www文件全部拷贝到ARM板上
2、设置ARM板与PC或者手机在同一个局域网内
3、执行命令:mjpg_streamer -i "input_uvc.so -d /dev/video1 -f 30 -q 90 -n" -o "output_http.so -w www"(注意文件路径)
4、假设ARM板IP地址为192.168.1.100
5、在chrome浏览器中打开:“http://192.168.1.100:8080/stream.html”就可以看见视频了
四:MJPG-streamer框架