简介
mjpg-streamer
是一个流转发的程序,但是这里的流其是是图片,它以图片的方式在视频提取和视频输出之间进行数据传递,所以一开始的目的是用于在浏览器上基于图片的方式显示视频,当然,效果比较差,也不是太流畅,看看,主要是学习一下里面的相关知识。
获取
我是从这里 下载的,当然源头还是在 sourceforge 上,只是 github
下载方便,统一。
编译
mjpg-streamer
采用 cmake
编译,具体执行由 Makefile
来执行,所以一开始并没有针对 交叉编译的部分,当然,通过 cmake
进行交叉编译也很简单,设置set(CMAKE_C_COMPILER xxxx)
, set(CMAKE_CXX_COMPILER xxxx)
就可以了,具体可以参见 cmake
的文档。接下来执行 make;
就可以了,生成的文件主要有 mjpg_streamer
可执行文件,input_uvc.so
, output_http.so
类似于这样的库。当然,输入,输出的库不止这两个,下面会有描述。
使用
mjpg-streamer
提供了 start.sh
脚本来启动程序,里面有很多参数说明,这里例举几个,其它的可参见脚本,很详细。
./mjpg-streamer -i "input_uvc.so --help" -- 关于这个输入插件的使用说明
./mjpg-streamer -o "output_http.so --help" -- 指定输出的参数说明
./mjpg-streamer -i "input_uvc.so" -o "output_http.so -p 8859" -- 指定输入插件和输出插件,同时指定输出的端口,如果没有显示一些错误,就可以在网页上通过`http://localhost:8859/?action=stream`来看视频了
其中 -i,-o 也可以用 --input, --output ,具体参见 `./mjpg-streamer --help`
结构
mjpg-streamer
采用插件的形势来完成相关的功能,主程序为 mjpg-streamer
, 插件分输入和输出,输入就是取视频的方式,输出就是将内容转出的方式。其中输入有input_file
, input_uvc
, input_http
, input_opencv
, input_raspicam
, input_ptp2
,其中输出有 output_http
, output_file
, output_udp,
output_rtsp,
output_viewer,我的测试过程中只使用了
input_uvc,
output_http,
output_udp`。
在 input
和 output
之间传递时使用的是 jpeg
图片。
output_file
将视频图片保存在本地output_udp
,output_rtsp
在指定端口等待udp
命令,并将图片数据保存本地output_viewer
通过SDL
将图片数据解码后,进行显示。input_uvc
通过v4l2 来提取视频,我用的 usb 摄像头接入 raspberrypi ,用的是这个输入- 其它 input 的插件都是指对各自己的协议实现的提取
input_control
执行一些如云台,放大,缩小等之类的功能,能过v4l2
的相关协议实现
总结
mjpg-streamer
采用图片来实现相关功能,但实用性确实不高,但是其架构 的实现还有一定的参考意义,同时 input 中各种实现也是一个好的学习途径。