mjpg-streamer 初识

简介

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`。

inputoutput 之间传递时使用的是 jpeg 图片。

  • output_file 将视频图片保存在本地
  • output_udp, output_rtsp 在指定端口等待 udp 命令,并将图片数据保存本地
  • output_viewer 通过 SDL 将图片数据解码后,进行显示。
  • input_uvc 通过v4l2 来提取视频,我用的 usb 摄像头接入 raspberrypi ,用的是这个输入
  • 其它 input 的插件都是指对各自己的协议实现的提取
  • input_control 执行一些如云台,放大,缩小等之类的功能,能过 v4l2 的相关协议实现

总结

mjpg-streamer 采用图片来实现相关功能,但实用性确实不高,但是其架构 的实现还有一定的参考意义,同时 input 中各种实现也是一个好的学习途径。

转载于:https://my.oschina.net/u/145591/blog/1619013

你可能感兴趣的:(mjpg-streamer 初识)