利用树莓派和CSI摄像头,通过两种常见方案,我们可以简单实现局域网内的实时视频监控,接下来就讲解下如何部署这两种方案。

测试环境

硬件:树莓派3B/3B+
系统:Raspberry Debian 9 / Debian 10

准备工作

首先,按《【树莓派】让你的SD卡快速扩容》方法对SD卡进行扩容,防止空间不足的问题
其次,根据《【树莓派】CSI摄像头简单配置》正确连接CSI摄像头,并保证能够正常拍照

方案一、利用mjpg-streamer框架实现

更新下树莓派的软件源

$ sudo apt update

安装编译mjpg-streamer所需的依赖包

$ sudo apt install cmake libjpeg8-dev libv4l-dev   #libv4l是小写"L"

下载mjpg-streamer源码包并对其解压

$ wget https://github.com/Five-great/mjpg-streamer/archive/master.zip
$ unzip  master.zip 
$ cd mjpg-streamer-master/mjpg-streamer-experimental/

或者通过git命令直接下载最新的源码

$ git clone https://github.com/jacksonliam/mjpg-streamer.git --depth=1
$ cd mjpg-streamer/mjpg-streamer-experimental

对源码进行编译并安装

$ make
$ sudo make install

对树莓派的摄像头节点进行确认

pi@raspberrypi:~/mjpg-streamer-master/mjpg-streamer-experimental $ ls /dev/video*
/dev/video0  /dev/video10  /dev/video11  /dev/video12

如果存在video*(*为数字,如video0)的设备节点,说明可以走uvc通道,直接运行start.sh脚步即可。

pi@raspberrypi:~/mjpg-streamer-master/mjpg-streamer-experimental $ chmod +x start.sh
pi@raspberrypi:~/mjpg-streamer-master/mjpg-streamer-experimental $ ./start.sh 
MJPG Streamer Version: git rev: 4be5902ba243d597f8d642da5b5271f25e2fb44d
 i: Using V4L2 device.: /dev/video0 #设备节点就是/dev/vide0
 i: Desired Resolution: 640 x 480
 i: Frames Per Second.: -1
 i: Format............: JPEG
 i: TV-Norm...........: DEFAULT
省略。。。。
 o: www-folder-path......: ./www/
 o: HTTP TCP port........: 8080
 o: HTTP Listen Address..: (null)
 o: username:password....: disabled
 o: commands.............: enabled

如果不存在video* (*为数字,如video0)的设备节点,则需要修改start.sh脚步,将input_uvc.so修改为input_raspicam.so, 如下:

pi@raspberrypi:~/mjpg-streamer-master/mjpg-streamer-experimental $  vi  startup.sh
export LD_LIBRARY_PATH="$(pwd)"
#./mjpg_streamer -i "input_uvc.so --help"

#./mjpg_streamer -i "./input_uvc.so" -o "./output_http.so -w ./www"
./mjpg_streamer -i "./input_raspicam.so" -o "./output_http.so -w ./www" #增加该字段
#./mjpg_streamer -i "./input_uvc.so -n -f 30 -r 1280x960"  -o "./output_http.so -w ./www"
#./mjpg_streamer -i "./input_uvc.so -n -f 30 -r 640x480 -d /dev/video0"  -o "./output_http.so -w ./www" &
#./mjpg_streamer -i "./input_uvc.so -d /dev/video0" -i "./input_uvc.so -d /dev/video1" -o "./output_http.so -w ./www"
#valgrind ./mjpg_streamer -i "./input_uvc.so" -o "./output_http.so -w ./www"

然后运行start.sh脚步即可。

pi@raspberrypi:~/mjpg-streamer-master/mjpg-streamer-experimental $ chmod +x start.sh
pi@raspberrypi:~/mjpg-streamer-master/mjpg-streamer-experimental $ ./start.sh 
MJPG Streamer Version.: 2.0
 i: fps.............: 5
 i: resolution........: 640 x 480
 i: camera parameters..............:

Sharpness 0, Contrast 0, Brightness 50
Saturation 0, ISO 0, Video Stabilisation No, Exposure compensation 0
Exposure Mode 'auto', AWB Mode 'auto', Image Effect 'none'
Metering Mode 'average', Colour Effect Enabled No with U = 128, V = 128
Rotation 0, hflip No, vflip No
ROI x 0.000000, y 0.000000, w 1.000000 h 1.000000
 o: www-folder-path......: ./www/
 o: HTTP TCP port........: 8080
 o: HTTP Listen Address..: (null)
 o: username:password....: disabled
 o: commands.............: enabled
 i: Starting Camera
Encoder Buffer Size 81920

然后打开浏览器,网址输入http://192.168.1.107:8080,即可看到监控视频效果:(PS:192.168.1.107为树莓派IP,可通过ifconfig命令确认实际IP)

编排部署监控系统 视频监控部署_mjpg-streamer

此时,在树莓派上,可通过wget命令对视频进行截图,如下:

$ wget  http://192.168.1.107:8080/?action=snapshot -O ./image1.jpg 
#这其中192.168.1.107为实际的ip,image1.jpg为要保存到的图片名称

最后,可以创建并添加开机启动的配置文件,实现开机自动启动视频监控:

创建要使用的开机脚本

pi@raspberrypi:~ $ cd 
pi@raspberrypi:~ $ vi test.sh  #/home/pi/test.sh路径

#!/bin/bash

cd  /home/pi/mjpg-streamer/mjpg-streamer-experimental/
./start.sh

添加配置文件

pi@raspberrypi:/etc/xdg/autostart $ cd   /etc/xdg/autostart/
pi@raspberrypi:/etc/xdg/autostart $ sudo cp xcompmgr.desktop  mjpg.desktop 
pi@raspberrypi:/etc/xdg/autostart $sudo  vim.tiny  mjpg.desktop   

[Desktop Entry]
Type=Application
Name=mjpeg-http
Comment=Start mjpeg-http compositor
NoDisplay=true
Exec=/home/pi/test.sh

保存退出,并重启树莓派。服务就会自动起来

方案二、利用VLC串流实时输出网络视频流

首先安装VLC软件包

$ sudo apt update
$ sudo apt install vlc # Raspberry Debian 10 可以不装

然后运行如下命令:

pi@raspberrypi:~ $ sudo raspivid -o - -t 0 -w 640 -h 360 -fps 25|cvlc -vvv stream:///dev/stdin --sout '#standard{access=http,mux=ts,dst=:8090}' :demux=h264 

VLC media player 3.0.8 Vetinari (revision 3.0.8-0-gf350b6b5a7)
[009b5b58] main libvlc debug: VLC media player - 3.0.8 Vetinari
[009b5b58] main libvlc debug: Copyright © 1996-2019 the VideoLAN team
[009b5b58] main libvlc debug: revision 3.0.8-0-gf350b6b5a7
省略...
[73600668] main input debug: Buffering 43%

即可开启raspivid视频捕捉并发送到VLC。

在PC端安装VLC软件,下载地址如下:

https://www.videolan.org/

安装时,一路默认即可。

最后打开安装好的VLC软件,选择"媒体(M)->流(S)…->网络(N)",输入

http://192.168.1.107:8090 #192.168.1.107为树莓派实际IP

如下图所示:

编排部署监控系统 视频监控部署_树莓派_02

编排部署监控系统 视频监控部署_ide_03

编排部署监控系统 视频监控部署_ide_04

编排部署监控系统 视频监控部署_mjpg-streamer_05

编排部署监控系统 视频监控部署_VLC_06

编排部署监控系统 视频监控部署_编排部署监控系统_07

编排部署监控系统 视频监控部署_编排部署监控系统_08

等待一会即可播出树莓派捕捉的视频流。