mjpg-streamer Github

用到的工具材料

  • 树莓派3B+
  • 网线
  • 电脑
  • CSI摄像头
  • USB摄像头

实现的功能有:
①树莓派通过网线将CSI摄像头与USB摄像头的实时画面推流至上位机电脑中的显示
②实测双摄延时低至200ms以下

我的另一篇博文中介绍了使用树莓派H.264硬件编解码推流CSI摄像头,所以本文仅介绍如何用 MJPG-Streamer推流USB摄像头实时画面。所以需要同时推流双摄时,可选择CSI+USB Camera或者双USB Camera。

1.树莓派硬件连接与软件及驱动安装
2.上位机PC端的接收视频流
3.延迟效果测试

1.硬件连接与软件及驱动配置

1)检测是否存在USB摄像头设备

输入以下指令:

  • 未插入USB摄像头
    pi@raspberrypi:~ $ lsusb
    Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
    Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

  • 插入USB摄像头
    pi@raspberrypi:~ $ lsusb
    Bus 001 Device 004: ID 05a3:9230 ARC International
    Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
    Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    pi@raspberrypi:~ $ v4l2-ctl —list-formats
    pi@raspberrypi:~ $ v4l2-ctl —list-formats
    ioctl: VIDIOC_ENUM_FMT
    Index : 0
    Type : Video Capture
    Pixel Format: ‘MJPG’ (compressed)
    Name : Motion-JPEG

    1. Index : 1
    2. Type : Video Capture
    3. Pixel Format: 'YUYV'
    4. Name : YUYV 4:2:2

MJPG-Streamer推流测试 | 淹死的鱼 - 图1

图1 还未插入USB摄像头

MJPG-Streamer推流测试 | 淹死的鱼 - 图2

图2 插入USB摄像头

2)安装 MJPG-Streamer from github

按照以下命令安装MJPG-Streamer及其相关配置 每一行为一个命令

  1. sudo apt-get install cmake libjpeg8-dev
  2. wget https://github.com/jacksonliam/mjpg-streamer/archive/master.zip
  3. unzip master.zip
  4. cd mjp*g-*
  5. cd mjpg-*
  6. make
  7. sudo make install
  8. cd $home

流程如下

MJPG-Streamer推流测试 | 淹死的鱼 - 图3

3)启动MJPG-Streamer

启动如下指令:
TCP端口8085被指定为输出端口,以确保没有对其他任何东西的干扰。

  1. /usr/local/bin/mjpg_streamer -i "/usr/local/lib/mjpg-streamer/input_uvc.so -n -f 10 -r 1280x720" -o "/usr/local/lib/mjpg-streamer/output_http.so -p 8085 -w /usr/local/share/mjpg-streamer/www"

MJPG-Streamer推流测试 | 淹死的鱼 - 图4

树莓派推流成功

如上图所示,推流已经完成,分辨率为720P(1280X720),端口号为8085,到此树莓派的任务已经完成

  1. pi@raspberrypi:~ $ /usr/local/bin/mjpg_streamer -i "/usr/local/lib/mjpg-streamer/input_uvc.so -n -f 10 -r 1280x720" -o "/usr/local/lib/mjpg-streamer/output_http.so -p 8085 -w /usr/local/share/mjpg-streamer/www"
  2. MJPG Streamer Version.: 2.0
  3. i: Using V4L2 device.: /dev/video0
  4. i: Desired Resolution: 1280 x 720
  5. i: Frames Per Second.: 10
  6. i: Format............: JPEG
  7. i: TV-Norm...........: DEFAULT
  8. i: FPS coerced ......: from 10 to 60
  9. o: www-folder-path......: /usr/local/share/mjpg-streamer/www/
  10. o: HTTP TCP port........: 8085
  11. o: HTTP Listen Address..: (null)
  12. o: username:password....: disabled
  13. o: commands.............: enabled

4)开启指定摄像头

  • USB设备存在两个摄像头

MJPG-Streamer推流测试 | 淹死的鱼 - 图5

  • 如果你有多个摄像头,也可以开启多个摄像头

  • -d /dev/video1 参数标明需要开启的摄像头
    /usr/local/bin/mjpg_streamer -i “/usr/local/lib/mjpg-streamer/input_uvc.so -d /dev/video1 -n -f 10 -r 1280x720” -o “/usr/local/lib/mjpg-streamer/output_http.so -p 8085 -w /usr/local/share/mjpg-streamer/www”

2.上位机PC端的接收视频流

采用web网页接收视频流

打开浏览器输入:

  1. // A case in point 例如:
  2. http://192.168.2.150:8085

输入 http://192.168.2.150:8085 打开后如下图:为MJPG Streamer 首页

MJPG-Streamer推流测试 | 淹死的鱼 - 图6

  • 查看视频点击Stream
    MJPG-Streamer推流测试 | 淹死的鱼 - 图7

看到网页中有树莓派USB摄像头拍摄的画面,证明视频推流成功。

3.双摄延迟效果测试

我们打开一个在线秒表,让其开始计时,而后我们用树莓派CSI摄像头及USB摄像头去拍摄电脑屏幕,然后截屏,计算拍摄的时间与秒表实际时间的差值,可以粗略测得延时的结果

MJPG-Streamer推流测试 | 淹死的鱼 - 图8

javascript

  1. "如上图所示" 在线秒表为1.18.697
  2. USB摄像头(Web MJPG-Streamer)推流视频中的在线秒表为1.18.567
  3. CSI摄像头(MPlayer 视频播放器)推流视频中的在线秒表为1.18.525
  4. 其差值△t1=0.130s=130ms t1=0.172s=172ms

之后我通过多次测试多种组合得到如下图数据(仅做参考):

MJPG-Streamer推流测试 | 淹死的鱼 - 图9

总结:

javascript

  1. 分辨率都为 720P 延迟大致为100-200ms之间[带光纤延迟增加并不明显]
  2. 分辨率都为 1080P 延迟为200-300ms