Dragonboard410c Android USB Camera 使用:mjpg-streamer介绍(一)

时间:2021-10-03 16:08:39

mjpg-streamer是一款免费基于IP地址的视频流服务器,从webcam摄像头采集图像,把它们以流的形式通过基于ip的网络传输到浏览器端,如火狐、Cambozola和VLC播放器等。它可以利用某些webcam的硬件压缩功能来降低服务器CPU的开销。为嵌入式设备和一些常规服务器提供一个轻量且更少CPU消耗的方案。

在其源代码中主要围绕linux的v4l2接口(注意低版本内核不存在v4l2接口因此无法使用)、socket网络编程、多线程编程。其中还包含重要的插件input-plugins和output-plugins。

mjpg-streamer采用模块化的设计方法,以功能块为单位进行描述,这些功能块被称为plug-in(组件)。软件中定义好了各组件的输入、输出,以及组件之间的衔接关系。用户可自行根据对功能的需求,选择需要的模块。这种模块化的程序设计简化了代码的编写、调试、维护,程序员只需要遵守设计的规范,就可以轻松地改写软件,或者编写新的模块以增强软件的功能。

input_uvc <——————– ——————–> output_autofocus

input_file <——————– MJPG-streamer ——————–> output_file

input_testpicture <——————–

input-plugins从摄像头读取视频数据,并将视频数据复制到内存中,output-plugins将这些视频数据进行处理,其中最重要的输出插件是网站服务器插件,它将视频数据传送到用户浏览器中,mjpg-streamer的工作就是将其中的一个输入插件和多个输出插件绑定在一起,所有的工作都是通过它的各个插件完成的。

mjpg-streamer源码包可从SourceForge网站下载使用,也可以到我的github中下载。
https://github.com/chenguangxiang/mjpg-streamer

其中的几个重要插件:

  • input_testpicture.so
    这是一个图像测试插件,它将预设好的图像编译成一个头文件,可以在没有摄像头的情况下传输图像,从而方便调试程序。
  • input_uvc.so
    此文件调用USB摄像头驱动程序V4L2,从摄像头读取视频数据。
  • input_control.so
    这个文件实现对摄像头转动的控制接口。
  • output_http.so
    这是一个功能齐全的网站服务器,它不仅可以从单一文件夹中处理文件,还可以执行一定的命令,它可以从输入插件中处理一幅图像,也可以将输入插件的视频文件根据现有M-JPEG标准以HTTP视频数据服务流形式输出。
  • output_file.so
    这个插件的功能是将输入插件的JPEG图像存储到特定的文件夹下,它可以用来抓取图像。

mjpg-streamer视频流服务器,模块结构清晰,易于管理,利用现有网络资源,很容易实现远程的网络视频采集,克服了现有视频采集的距离问题,开发简单,可移植性高,并且系统运行稳定。