【树莓派】ffmpeg + nginx 推 rtmp 视频流实现远程监控

目录

1. 安装说明

2. 树莓派安装 ffmpeg

3. 云端安装 rtmp 服务器

4. 树莓派推流至 rtmp 服务器

5. 客户端播放 rtmp 视频流


1. 安装说明

要想树莓派实现远程监控的能力,那么就需要有一个“视频中转站”,这个中转站要有一个公网IP,这样才可以在任何地方都能访问

我这里使用的中转站是阿里云服务器。当然网上也有很多 rtmp 服务器可以使用,有需要的自行搜索就可以了。

一个简要的实现流程图如下:

【树莓派】ffmpeg + nginx 推 rtmp 视频流实现远程监控

2. 树莓派安装 ffmpeg

顺序执行以下命令(具体的下载目录和安装目录按自己实际需要进行修改,sudo make 这一步耗时较长):

cd <你的软件下载目录>
sudo apt-get update
sudo apt-get install libx264-dev

wget http://ffmpeg.org/releases/ffmpeg-4.1.tar.bz2
sudo tar jxvf ffmpeg-4.1.tar.bz2

cd ffmpeg-4.1/

sudo ./configure --prefix=/opt/ffmpeg --enable-shared --enable-pthreads --enable-gpl  --enable-avresample --enable-libx264 --disable-yasm
sudo make
sudo install

安装完成后可能遇到的问题:

问题一: 执行 ffmpeg,报命令无效

解决办法:把安装目录下的 /opt/ffmpeg/bin/ffmpeg 文件复制到 /usr/bin 当中,实际的安装目录见 ./configure 的 --prefix 配置项

 

问题二:报错:ffmpeg: error while loading shared libraries: libavdevice.so.58: cannot open shared object file: No such file or directory

解决办法:

sudo vim ~/.bashrc

复制下面内容粘贴至文件最后(FFMPEG_HOME 的值为实际的 ffmpeg 安装路径),然后保存退出:

export FFMPEG_HOME=/opt/ffmpeg

export PATH=$FFMPEG_HOME/bin:$PATH

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$FFMPEG_HOME/lib:/usr/local/lib

然后执行命令:

source ~/.bashrc

 

最终完成后,执行 ffmpeg 命令,会出现下面的提示:

【树莓派】ffmpeg + nginx 推 rtmp 视频流实现远程监控

3. 云端安装 rtmp 服务器

登录到云端

如果没有安装 unzip 命令,可以先安装以下: sudo yum install unzip

Step 1: 下载 nginx-rtmp-module 模块

cd ~/software/
wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
unzip  master.zip 

Step 2:下载 openresty

cd ~/software/
wget https://openresty.org/download/openresty-1.13.6.2.tar.gz

tar xvf openresty-1.13.6.2.tar.gz
mv openresty-1.13.6.2 openresty

Step 3:配置和安装

cd openresty
sudo ./configure --prefix=/opt/openresty --add-module=<根据自己的地址写>/nginx-rtmp-module-master

sudo make 
sudo make install

sudo ln -s /opt/openresty/nginx/sbin/nginx /usr/sbin/nginx

Step 4:配置 rtmp 信息

sudo vim /opt/openresty/nginx/conf/nginx.conf

然后在配置文件中增加如下内容并保存退出:

rtmp {
	server {
		listen 1935;
		application videotest{
			live on;
		}
	}
}

【树莓派】ffmpeg + nginx 推 rtmp 视频流实现远程监控

4. 树莓派推流至 rtmp 服务器

raspivid -w 640 -h 480 -b 15000000 -t 0 -a 12 -a 1024 -a "CAM-1 %Y-%m-%d %X" -ae 18,0xff,0x808000 -o - | ffmpeg -re -i - -s 640x480 -vcodec copy -acodec copy -b:v 800k -b:a 32k -f flv rtmp://<自己云服务器的公有IP地址>/videotest

执行之后可能会有下面的报错

【树莓派】ffmpeg + nginx 推 rtmp 视频流实现远程监控

这里可能有两个地方需要设置:

第一个设置:云服务器的安全策略组,要设置内网入方向允许 1935 端口

【树莓派】ffmpeg + nginx 推 rtmp 视频流实现远程监控

第二个设置:可能还需要配置防火墙

sudo firewall-cmd --permanent --add-port=1935/tcp
sudo firewall-cmd --reload

5. 客户端播放 rtmp 视频流

我在 PC 上播放是用的 VLC,在 iOS 上是用的 CarEyeRTMP 这个 APP

只需要配置正确 rtmp 地址应该就可以播放了:

【树莓派】ffmpeg + nginx 推 rtmp 视频流实现远程监控

播放效果如下:

【树莓派】ffmpeg + nginx 推 rtmp 视频流实现远程监控

 

注:实现视频流直播,对网速会有一些要求,如果连接的客户端多的话,很可能会延迟比较大