Mjpg-streamer

来自百问网嵌入式Linux wiki
Wiki讨论 | 贡献2020年6月5日 (五) 09:46的版本

查看摄像头数据

列出所有摄像头设备

使用v4l2-ctl --list-devices命令来获取当前开发板下都有哪些摄像头设备,以及设备节点名称,如下所示我们使用的是USB摄像头对应的设备节点为 /dev/video1
[root@imx6ull:~]# v4l2-ctl --list-devices
pxp (pxp_v4l2):
        /dev/video0

USB 2.0 Camera (usb-ci_hdrc.1-1.3):
        /dev/video1

查看摄像头详细信息

使用 v4l2-ctl -L命令来列出摄像头设备的详细信息,使用-d /dev/video1来指定查看的摄像头设备为/dev/video1
[root@imx6ull:~]#  v4l2-ctl -L -d /dev/video1
                     brightness 0x00980900 (int)    : min=-255 max=255 step=1 default=0 value=0
                       contrast 0x00980901 (int)    : min=0 max=30 step=1 default=15 value=15
                     saturation 0x00980902 (int)    : min=0 max=127 step=1 default=30 value=30
                            hue 0x00980903 (int)    : min=-16000 max=16000 step=100 default=0 value=0
 white_balance_temperature_auto 0x0098090c (bool)   : default=1 value=1
                          gamma 0x00980910 (int)    : min=20 max=250 step=1 default=98 value=98
           power_line_frequency 0x00980918 (menu)   : min=0 max=2 default=1 value=1
                                0: Disabled
                                1: 50 Hz
                                2: 60 Hz
      white_balance_temperature 0x0098091a (int)    : min=2500 max=7000 step=1 default=5000 value=5000 flags=inactive
                      sharpness 0x0098091b (int)    : min=0 max=15 step=1 default=2 value=2
         backlight_compensation 0x0098091c (int)    : min=0 max=2 step=1 default=1 value=1

查看摄像头支持的像素格式和分辨率

使用v4l2-ctl --list-formats-ext命令来获取列出摄像头支持的像素格式,分辨率大小,以及帧率都有哪些,使用 -d /dev/video1命令来指定获取的设备为/dev/video1
		 
[root@imx6ull:~]#
 v4l2-ctl --list-formats-ext -d /dev/video1
ioctl: VIDIOC_ENUM_FMT
        Type: Video Capture

        [0]: 'YUYV' (YUYV 4:2:2)
                Size: Discrete 640x480
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.040s (25.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                        Interval: Discrete 0.200s (5.000 fps)
                Size: Discrete 160x120
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.040s (25.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                        Interval: Discrete 0.200s (5.000 fps)
                Size: Discrete 320x240
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.040s (25.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                        Interval: Discrete 0.200s (5.000 fps)
                Size: Discrete 352x288
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.040s (25.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                        Interval: Discrete 0.200s (5.000 fps)
                Size: Discrete 800x600
                        Interval: Discrete 0.067s (15.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                        Interval: Discrete 0.200s (5.000 fps)
                Size: Discrete 1280x720
                        Interval: Discrete 0.067s (15.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                        Interval: Discrete 0.200s (5.000 fps)
                Size: Discrete 1280x1024
                        Interval: Discrete 0.083s (12.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                        Interval: Discrete 0.200s (5.000 fps)
                Size: Discrete 1600x1200
                        Interval: Discrete 0.111s (9.000 fps)
                        Interval: Discrete 0.200s (5.000 fps)
        [1]: 'MJPG' (Motion-JPEG, compressed)
                Size: Discrete 640x480
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.040s (25.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                        Interval: Discrete 0.200s (5.000 fps)
                Size: Discrete 160x120
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.040s (25.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                        Interval: Discrete 0.200s (5.000 fps)
                Size: Discrete 320x240
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.040s (25.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                        Interval: Discrete 0.200s (5.000 fps)
                Size: Discrete 352x288
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.040s (25.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                        Interval: Discrete 0.200s (5.000 fps)
                Size: Discrete 800x600
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.040s (25.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                        Interval: Discrete 0.200s (5.000 fps)
                Size: Discrete 1280x720
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.040s (25.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                        Interval: Discrete 0.200s (5.000 fps)
                Size: Discrete 1280x1024
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.040s (25.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                        Interval: Discrete 0.200s (5.000 fps)

使用mjpg_streamer预览摄像头数据

查看开发板IP地址

[root@imx6ull:~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:01:3F:2D:3E:4D
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth1      Link encap:Ethernet  HWaddr 00:01:1F:2D:3E:4D
          inet addr:192.168.1.21  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fdfd:3597:aa7a:0:201:1fff:fe2d:3e4d/64 Scope:Global
          inet6 addr: fe80::201:1fff:fe2d:3e4d/64 Scope:Link
          inet6 addr: fdfd:3597:aa7a::914/64 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:558 errors:0 dropped:0 overruns:0 frame:0
          TX packets:291 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:221870 (216.6 KiB)  TX bytes:29419 (28.7 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:7756 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7756 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:468263 (457.2 KiB)  TX bytes:468263 (457.2 KiB)

mjpg_streamer参数讲解

使用mjpg_streamer -h 查看帮助信息。
[root@imx6ull:~]# mjpg_streamer -h
-----------------------------------------------------------------------
Usage: mjpg_streamer
  -i | --input "<input-plugin.so> [parameters]"
  -o | --output "<output-plugin.so> [parameters]"
 [-h | --help ]........: display this help
 [-v | --version ].....: display version information
 [-b | --background]...: fork to the background, daemon mode
-----------------------------------------------------------------------
Example #1:
 To open an UVC webcam "/dev/video1" and stream it via HTTP:
  mjpg_streamer -i "input_uvc.so -d /dev/video1" -o "output_http.so"
-----------------------------------------------------------------------
Example #2:
 To open an UVC webcam and stream via HTTP port 8090:
  mjpg_streamer -i "input_uvc.so" -o "output_http.so -p 8090"
-----------------------------------------------------------------------
Example #3:
 To get help for a certain input plugin:
  mjpg_streamer -i "input_uvc.so --help"
-----------------------------------------------------------------------
In case the modules (=plugins) can not be found:
 * Set the default search path for the modules with:
   export LD_LIBRARY_PATH=/path/to/plugins,
 * or put the plugins into the "/lib/" or "/usr/lib" folder,
 * or instead of just providing the plugin file name, use a complete
   path and filename:
   mjpg_streamer -i "/path/to/modules/input_uvc.so"
-----------------------------------------------------------------------
得知mjpg_streamer后需要接-i和-o两个参数,再分别看这两个参数提供的不同so插件文件支持哪些选项。
可选的-h查询帮助信息、-v查询版本信息、-b后台执行就不多介绍了。
输入so插件包含:input_uvc.so、input_testpicture.so、(input_file.so、input_ptp2.so、input_http.so)
输出so插件包含:output_http.so、(output_file.so、output_udp.so、output_rtsp.so、output_viewer.so)
其中括号部分,我这个Buildroot的mjpg_streamer版本没有提供。

输入插件1:input_uvc.so

# mjpg_streamer -i "/usr/lib/input_uvc.so --help"
MJPG Streamer Version: git rev: fd184d0
---------------------------------------------------------------
Help for input plugin..: UVC webcam grabber
---------------------------------------------------------------
The following parameters can be passed to this plugin:
[-d | --device ].......: video device to open (your camera)
[-r | --resolution ]...: the resolution of the video device,
                        can be one of the following strings:
                        QQVGA QCIF CGA QVGA CIF PAL
                        VGA SVGA XGA HD SXGA UXGA
                        FHD
                        or a custom value like the following
                        example: 640x480
[-f | --fps ]..........: frames per second
                        (activates YUYV format, disables MJPEG)
[-q | --quality ] .....: set quality of JPEG encoding
[-m | --minimum_size ].: drop frames smaller then this limit, useful
                        if the webcam produces small-sized garbage frames
                        may happen under low light conditions
[-e | --every_frame ]..: drop all frames except numbered
[-n | --no_dynctrl ]...: do not initalize dynctrls of Linux-UVC driver
[-l | --led ]..........: switch the LED "on", "off", let it "blink" or leave
                        it up to the driver using the value "auto"
[-t | --tvnorm ] ......: set TV-Norm pal, ntsc or secam
[-u | --uyvy ] ........: Use UYVY format, default: MJPEG (uses more cpu power)
[-y | --yuv  ] ........: Use YUV format, default: MJPEG (uses more cpu power)
[-fourcc ] ............: Use FOURCC codec 'argopt',
                        currently supported codecs are: RGBP
---------------------------------------------------------------
Optional parameters (may not be supported by all cameras):
[-br ].................: Set image brightness (auto or integer)
[-co ].................: Set image contrast (integer)
[-sh ].................: Set image sharpness (integer)
[-sa ].................: Set image saturation (integer)
[-cb ].................: Set color balance (auto or integer)
[-wb ].................: Set white balance (auto or integer)
[-ex ].................: Set exposure (auto, shutter-priority, aperature-priority, or integer)
[-bk ].................: Set backlight compensation (integer)
[-rot ]................: Set image rotation (0-359)
[-hf ].................: Set horizontal flip (true/false)
[-vf ].................: Set vertical flip (true/false)
[-pl ].................: Set power line filter (disabled, 50hz, 60hz, auto)
[-gain ]...............: Set gain (auto or integer)
[-cagc ]...............: Set chroma gain control (auto or integer)
---------------------------------------------------------------
input_init() return value signals to exit
  • 基本参数:
  • -d:指定video设备节点
  • -r:指定分辨率,VGA或640x480类似值
  • -f:指定每秒帧数
  • -q:指定JPEG编码质量
  • -m:指定丢弃小于该值的帧
  • -e:删除除编号以外的所有帧
  • -n:不要初始化Linux-UVC驱动程序的dynctrls
  • -l:设置LED on/off/blink,设置auto将取决于驱动程序
  • -t:设置TV-Norm pal,ntsc或secam
  • -u:指定输入为UYVY格式,通过CPU将UYVC转为MJPEG,这样会消耗更多CPU
  • -y:指定输入为YUV格式,通过CPU将YUV转为MJPEG,这样会消耗更多CPU
  • -fourcc:使用FOURCC编解码器argopt,目前支持的编解码器是:RGBP
  • 新版新增:
  • -timestamp:使用系统时间填充帧时间戳
  • -softfps:丢帧以尝试实现此FPS
  • 图像参数:
  • -br:设置图像亮度
  • -co:设置图像对比度
  • -sh:设置图像清晰度
  • -sa:设置图像饱和度
  • -cb:设置图像颜色平衡
  • -wb:设置图像白平衡
  • -ex:设置图像曝光
  • -bk:设置图像曝光补偿
  • -rot:设置图像旋转0-359
  • -hf:设置图像水平翻转
  • -vf:设置图像垂直翻转
  • -pl:设置图像避免闪烁频率
  • -gain:设置图像增益
  • -cagc:设置图像色度增益控制


输入插件2:input_testpicture.so

# mjpg_streamer -i "/usr/lib/input_testpicture.so --help"
MJPG Streamer Version: git rev: fd184d0
 ---------------------------------------------------------------
 Help for input plugin..: TESTPICTURE input plugin
 ---------------------------------------------------------------
 The following parameters can be passed to this plugin:
 [-d | --delay ]........: delay to pause between frames
 [-r | --resolution]....: can be 960x720, 640x480, 320x240, 160x120
 ---------------------------------------------------------------
input_init() return value signals to exit
  • 基本参数:
  • -d:指定在两帧之间的延时
  • -r:指定在分辨率

输入插件3:input_file.so

# mjpg-streamer -i "/snap/mjpg-streamer/42/lib/mjpg-streamer/input_file.so --help"
MJPG Streamer Version: git rev: f387bb44e6c087271b763b27da998bf2e06c4f5d
 ---------------------------------------------------------------
 Help for input plugin..: FILE input plugin
 ---------------------------------------------------------------
 The following parameters can be passed to this plugin:
 [-d | --delay ]........: delay (in seconds) to pause between frames
 [-f | --folder ].......: folder to watch for new JPEG files
 [-r | --remove ].......: remove/delete JPEG file after reading
 [-n | --name ].........: ignore changes unless filename matches
 [-e | --existing ].....: serve the existing *.jpg files from the specified directory
 ---------------------------------------------------------------
input_init() return value signals to exit
  • 基本参数:
  • -d:指定在两帧之间的延时(单位:s)
  • -f:指定查看新JEPG文件的目录
  • -r:指定读取后要删除的JEPG文件
  • -n:指定除非文件名匹配忽略更改
  • -e:指定目录读取现有JPG文件

输入插件4:input_ptp2.so

# mjpg-streamer -i "/snap/mjpg-streamer/42/lib/mjpg-streamer/input_ptp2.so --help"
MJPG Streamer Version: git rev: f387bb44e6c087271b763b27da998bf2e06c4f5d
PTP2 input plugin: invalid option -- '-'
 ---------------------------------------------------------------
 Help for input plugin..: PTP2 input plugin
 ---------------------------------------------------------------
 The following parameters can be passed to this plugin:
 [-h ]..........: print this help
 [-u X ]........: delay between frames in us (default 0)
 [-d X ]........: camera address in [usb:xxx,yyy] form; use
                  gphoto2 --auto-detect to get a list of
                  available cameras
 ---------------------------------------------------------------
input_init() return value signals to exit
  • 基本参数:
  • -h:打印帮助
  • -u:指定在两帧之间的延时(单位:us)
  • -d:指定可用相机

输入插件5:input_http.so

# mjpg-streamer -i "/snap/mjpg-streamer/42/lib/mjpg-streamer/input_http.so --help""
MJPG Streamer Version: git rev: f387bb44e6c087271b763b27da998bf2e06c4f5d
 ---------------------------------------------------------------
 Help for input plugin..: HTTP Input plugin
 ---------------------------------------------------------------
 The following parameters can be passed to this plugin:
 [-v | --version ]........: current SVN Revision
 [-h | --help]............: show this message
 [-H | --host]............: select host to data from, localhost is default
 [-p | --port]............: port, defaults to 8080
 ---------------------------------------------------------------
input_init() return value signals to exit
  • 基本参数:
  • -v:打印版本信息
  • -h:打印帮助信息
  • -H:指定主机地址
  • -p:指定端口

输出插件1:output_http.so

	
# mjpg_streamer -o "/usr/lib/output_http.so --help"
MJPG Streamer Version: git rev: fd184d0
---------------------------------------------------------------
Help for output plugin..: HTTP output plugin
---------------------------------------------------------------
The following parameters can be passed to this plugin:
[-w | --www ]...........: folder that contains webpages in
                        flat hierarchy (no subfolders)
[-p | --port ]..........: TCP port for this HTTP server
[-l ] --listen ]........: Listen on Hostname / IP
[-c | --credentials ]...: ask for "username:password" on connect
[-n | --nocommands ]....: disable execution of commands
---------------------------------------------------------------
output_init() return value signals to exit
  • 基本参数:
  • -w:指定网页根目录(不支持子文件夹)
  • -p:指定HTTP服务器的TCP端口
  • -l:指定监听主机IP
  • -c:指定在连接时询问的账户名、密码
  • -n:指定禁用命令执行

输出插件2:output_file.so

# mjpg-streamer -o "/snap/mjpg-streamer/42/lib/mjpg-streamer/output_file.so --help"
MJPG Streamer Version: git rev: f387bb44e6c087271b763b27da998bf2e06c4f5d
 ---------------------------------------------------------------
 Help for output plugin..: FILE output plugin
 ---------------------------------------------------------------
 The following parameters can be passed to this plugin:
 [-f | --folder ]........: folder to save pictures
 [-m | --mjpeg ].........: save the frames to an mjpg file 
 [-l | --link ]..........: link the last picture in ringbuffer as this fixed named file
 [-d | --delay ].........: delay after saving pictures in ms
 [-i | --input ].........: read frames from the specified input plugin
 The following arguments are takes effect only if the current mode is not MJPG
 [-s | --size ]..........: size of ring buffer (max number of pictures to hold)
 [-e | --exceed ]........: allow ringbuffer to exceed limit by this amount
 [-c | --command ].......: execute command after saving picture
 ---------------------------------------------------------------
output_init() return value signals to exit
  • 基本参数:
  • -f:指定保存图片文件夹
  • -m:将帧保存的mjpg文件夹
  • -l:将ringbuffer中的最后一张图片链接为此固定命名文件
  • -d:保存图片后延时(单位:ms)
  • -i:从指定的输入插件中读取帧
  • 仅当当前模式不是MJPG时,以下参数才会生效
  • -s:环形缓冲区的大小(要保留的最大图片数)
  • -e:允许ringbuffer超过此数量的限制
  • -c:保存图片后执行命令

输出插件3:output_udp.so

# mjpg-streamer -o "/snap/mjpg-streamer/42/lib/mjpg-streamer/output_udp.so --help"
MJPG Streamer Version: git rev: f387bb44e6c087271b763b27da998bf2e06c4f5d
 ---------------------------------------------------------------
 Help for output plugin..: UDP output plugin
 ---------------------------------------------------------------
 The following parameters can be passed to this plugin:
 [-f | --folder ]........: folder to save pictures
 [-d | --delay ].........: delay after saving pictures in ms
 [-c | --command ].......: execute command after saveing picture
 [-p | --port ]..........: UDP port to listen for picture requests. UDP message is the filename to save
 [-i | --input ].......: read frames from the specified input plugin (first input plugin between the arguments is the 0th)
 ---------------------------------------------------------------
output_init() return value signals to exit
  • 基本参数:
  • -f:指定保存图片的文件夹
  • -d:保存图片后延时(单位:ms)
  • -c:保存图片后执行命令
  • -p:指定UDP端口监听图片请求
  • -i:从指定的输入插件读取帧

输出插件4:output_rtsp.so

# mjpg-streamer -o "/snap/mjpg-streamer/42/lib/mjpg-streamer/output_rtsp.so --help"
MJPG Streamer Version: git rev: f387bb44e6c087271b763b27da998bf2e06c4f5d
 ---------------------------------------------------------------
 Help for output plugin..: RTSP output plugin
 ---------------------------------------------------------------
 The following parameters can be passed to this plugin:
 [-p | --port ]..........: UDP port to listen for picture requests. UDP message is the filename to save
 [-i | --input ].......: read frames from the specified input plugin (first input plugin between the arguments is the 0th)
 ---------------------------------------------------------------
output_init() return value signals to exit
  • 基本参数:
  • -p:指定UDP端口监听图片请求
  • -i:从指定的输入插件读取帧

输出插件5:output_viewer.so

# mjpg-streamer -o "/snap/mjpg-streamer/42/lib/mjpg-streamer/output_viewer.so --help"
MJPG Streamer Version: git rev: f387bb44e6c087271b763b27da998bf2e06c4f5d
 ---------------------------------------------------------------
 Help for output plugin..: VIEWER output plugin
 ---------------------------------------------------------------
output_init() return value signals to exit
  • 基本参数:

执行mjpg_streamer获取摄像头数据

如下所示我们使用-i参数指定输入so插件类型为uvc类型,-d参数指定使用的摄像头设备为/dev/video1 ,-r参数指定输入分辨率为640x480 ,-q参数指定uvc数据质量为90,-n参数说明不要初始化Linux-UVC驱动程序的dynctrls,-o参数指定输出类型为http方式,-w指定网站目录为/usr/camera/web
mjpg_streamer -i "/usr/lib/mjpg-streamer/input_uvc.so -d /dev/video1  -r 640x480 -f 30 -q 90 -n" -o "/usr/lib/mjpg-streamer/output_http.so -w /usr/share/mjpg-streamer/www/"

浏览器打开并查看摄像头数据

如上所示我们的开发板IP地址为192.168.1.21 ,让后我们使用电脑浏览器打开如下地址即可预览摄像头数据。
192.168.1.21:8080