树莓派 - 摄像头推流

<封面摄于浙江·新昌的乡村田间,落日残霞进行后期处理而成,有点北极光的感觉。>

安装摄像头

  1. 将 CSI 摄像头串口插入树莓派对应的凹槽。
  2. 连接完成后命令行输入 sudo raspi-config,Interface Options => Camera,启动摄像头并重启。

raspivid

raspivid 是 Raspberry PI OS 内置的视频采集工具,可以直接使用摄像头采集视频并进行推流。

Tips: 64 位系统暂不支持该工具,请使用 32 位系统。

TCP(H.246 裸流)

执行以下命令可直接以 TCP 形式推送 H.246 格式的裸流。

1
$ raspivid -t 0 -w 800 -h 600 -fps 20 -o - | nc -k -l 8080
UDP(H.246 裸流)

对网络延迟要求较高的场景下,可以使用 UDP 的形式推送裸流,以降低延迟。

1
$ raspivid -t 999999 -hf -o -| socat – udp-datagram:192.168.3.6:8080
ffmpeg(RTMP 串流)

在直播场景下,我们可以借助 ffmpeg 工具对视频进行转码,并推流到 RTMP 服务器;客户端可以连接该服务器接收视频。

在云服务器上执行以下命令搭建 RTMP 推流服务器。

1
2
3
$ sudo yum install docker  # 安装 Docker
$ sudo docker pull tiangolo/nginx-rtmp # 拉取镜像
$ sudo docker run -d -p 8080:8080 --name nginx-rtmp tiangolo/nginx-rtmp # 启动服务

在树莓派上执行以下命令进行推流。

1
raspivid -t 0 -w 800 -h 600 -o - | ffmpeg -i - -s 800x600 -f flv -b 800k -r 30 rtmp://www.izhaoo.com:8080/live

大概是最简单的 rtmp 推流服务器搭建方法

MJPG-streamer(MJPEG)

介绍

MJPG-streamer 是一款开源视频推流服务器,以 HTTP 的形式推送 MJPEG 格式的视频,该方案实现比较简单,延迟也凑合,大约在 1s 内。MJPEG 是一系列 JPG 图片帧组成的视频,只支持以 <img src="MJPEG 务器地址"> 标签的形式插入 HTML 播放,不能单独分帧处理。所以只适合简单的摄像头监控场景。

安装过程

安装依赖库:

1
2
$ sudo apt-get update  # 更新源
$ sudo apt-get install subversion libjpeg8-dev imagemagick libv4l-dev cmake git # 安装依赖

本地编译项目:

1
2
3
4
$ sudo git clone https://github.com/jacksonliam/mjpg-streamer.git  # 下载项目
$ cd mjpg-streamer/mjpg-streamer-experimental # 进入目录
$ make all # 编译
$ sudo make install # 安装

对于普通的 USB 摄像头,通过以下命令即可使用:

1
2
$ cd mjpg-streamer/mjpg-streamer-experimental  # 进入目录
$ ./mjpg_streamer -i "./input_uvc.so" -o "./output_http.so -w ./www" # 推送视频

打开浏览器输入 http://树莓派IP:8080/?action=stream 即可访问视频。

CSI 摄像头安装依赖

若是使用树莓派的 CSI 摄像头,还需要补充安装一些硬件支持依赖。

1
2
$ curl https://www.linux-projects.org/listing/uv4l_repo/lpkey.asc | sudo apt-key add -  # 下载并安装密钥
$ vim sudo nano /etc/apt/sources.list # 打开依赖源文件

在文件的最后一行加入: deb https://www.linux-projects.org/listing/uv4l_repo/raspbian/stretch stretch main,键入 :wq 保存。

1
2
3
$ sudo apt-get update  # 更新源
$ sudo apt-get install uv4l uv4l-raspicam uv4l-raspicam-extras # 安装依赖驱动
$ sudo reboot # 重启

重启后输入以下命令继续安装依赖:

1
2
3
4
$ sudo pkill uv4l  # 关闭进程
$ sudo apt-get update # 更新源
$ sudo apt-get install uv4l-uvc uv4l-xscreen uv4l-mjpegstream # 安装依赖
$ sudo reboot # 重启

重启后输入以下命令开始推送视频:

1
2
3
$ sudo modprobe bcm2835-v4l2  # 打开摄像头
$ cd mjpg-streamer/mjpg-streamer-experimental # 进入目录
$ ./mjpg_streamer -i "./input_uvc.so -d /dev/video0 -n -y -f 25 -r 640x480" -o "./output_http.so -n -w /usr/local/www" # 推送视频

打开浏览器输入 http://树莓派IP:8080/?action=stream 即可访问视频。

查看评论