目录
- 安装环境要求
- 硬件
- 软件
- 整体架构
- 配置步骤
- 搭建nginx rtmp服务器
- 编译安装nginx和nginx-rtmp-module
- 配置启动nginx
- ffmpeg编译安装
- 下载源码并编译安装x264
- 下载源码编译安装ffmpeg
- 可能遇到的错误
- 启动ffmpeg开始推流
安装环境要求
硬件
树莓派4B2G,csi摄像头
软件
树莓派系统:2019-07-10-raspbian-buster-full.img
nginx
nginx-rtmp-module
ffmpeg:ffmpeg-4.1
注意:如果是4B的树莓派请务必下载2019年6月之后的树莓派官方full系统,full版本的系统搭载了官方推荐的软件,部分软件后续ffmpeg的编解码需要用到,此外树莓派4B仅支持2019年6月之后的full系统。
整体架构
- 树莓派【采集本地csi摄像头输入借助ffmpeg工具推流到nginx服务器】
- 一台具有公网IP的云服务器【部署nginx,提供rtmp推拉流地址】
- 客户端【根据nginx服务器提供的推拉流地址拉取rtmp视频流本地播放】
配置步骤
搭建nginx rtmp服务器
编译安装nginx和nginx-rtmp-module
安装 NGINX 依赖项(可参考nginx官方源码编译步骤)
PCRE——支持正则表达式。NGINX Core和Rewrite模块需要。
wget github.com/PCRE2Project/pcre2/releases/download/pcre2-10.40/pcre2-10.40.tar.gz
tar -zxf pcre2-10.40.tar.gz
cd pcre2-10.40
./configure
make
sudo make install
zlib – 支持标头压缩。NGNX Gzip模块需要。
wget http://zlib.net/zlib-1.2.13.tar.gz
tar -zxf zlib-1.2.13.tar.gz
cd zlib-1.2.13
./configure
make
sudo make install
OpenSSL – 支持 HTTPS 协议。NGINX SSL模块和其他模块需要。
sudo apt install libssl-dev
从nginx.org下载最新稳定版的nginx
wget https://nginx.org/download/nginx-1.22.1.tar.gz
tar zxf nginx-1.22.1.tar.gz
下载nginx-rtmp-module
wget https://github.com/arut/nginx-rtmp-module/archive/refs/tags/v1.2.2.tar.gz
tar -xvf v1.2.2.tar.gz
直接使用nginx一起编译nginx-rtmp-module
cd nginx目录
./configure --add-module=nginx-rtmp-module全路径
make
sudo make install
至此nginx和nginx-rtmp-module编译安装完成。
配置启动nginx
sudo vi /usr/local/nginx/conf/nginx.conf
添加下列配置到nginx配置文件(可参考nginx-rtmp-module官方配置说明)
rtmp {
server {
listen 1935;
chunk_size 4000;
application hls { #rtmp推流请求路径: rtmp://nginx服务器ip:1935/hls
live on;
hls on;
hls_path /usr/local/nginx/html/hls;
hls_fragment 5s;
}
}
}
退出保存启动nginx
./usr/local/nginx/sbin/nginx
浏览器访问nginx服务器ip显示如下则nginx配置启动成功
ffmpeg编译安装
出于降低树莓派cpu的负担以及提高推流视频帧率的目的,这里采取ffmpeg h264_omx解码器充分发挥树莓派gpu性能(树莓派硬解)。由于树莓派sudo apt install ffmpeg
所安装的ffmpeg不带h264_omx解码器,这里我们采取自行下载编译的方式安装ffmpeg。
下载源码并编译安装x264
下载x264源码
git clone https://git.videolan.org/git/x264.git
cd x264
vi config_x264.sh
输入如下内容添加配置参数
#!/bin/sh
./configure \
--disable-shared --enable-static \
--enable-strip \
--disable-cli
配置编译安装
sh config_x264.sh
make -j4
sudo make install
下载源码编译安装ffmpeg
wget https://ffmpeg.org/releases/ffmpeg-4.1.tar.bz2
tar jxvf ffmpeg-4.1.tar.bz2
cd ffmpeg-4.1
vi config_ffmpeg.sh
输入如下内容添加配置参数
#!/bin/sh
PREFIX=/usr/local
./configure \
--enable-gpl --enable-version3 --enable-nonfree \
--enable-static --disable-shared \
\
--prefix=$PREFIX \
\
--disable-opencl \
--disable-thumb \
--disable-pic \
--disable-stripping \
\
--enable-small \
\
--enable-ffmpeg \
--enable-ffplay \
--enable-ffprobe \
\
--disable-doc \
--disable-htmlpages \
--disable-podpages \
--disable-txtpages \
--disable-manpages \
\
--disable-everything \
\
--enable-libx264 \
--enable-encoder=libx264 \
--enable-decoder=h264 \
--enable-encoder=aac \
--enable-decoder=aac \
--enable-encoder=ac3 \
--enable-decoder=ac3 \
--enable-encoder=rawvideo \
--enable-decoder=rawvideo \
--enable-encoder=mjpeg \
--enable-decoder=mjpeg \
\
--enable-demuxer=concat \
--enable-muxer=flv \
--enable-demuxer=flv \
--enable-demuxer=live_flv \
--enable-muxer=hls \
--enable-muxer=segment \
--enable-muxer=stream_segment \
--enable-muxer=mov \
--enable-demuxer=mov \
--enable-muxer=mp4 \
--enable-muxer=mpegts \
--enable-demuxer=mpegts \
--enable-demuxer=mpegvideo \
--enable-muxer=matroska \
--enable-demuxer=matroska \
--enable-muxer=wav \
--enable-demuxer=wav \
--enable-muxer=pcm* \
--enable-demuxer=pcm* \
--enable-muxer=rawvideo \
--enable-demuxer=rawvideo \
--enable-muxer=rtsp \
--enable-demuxer=rtsp \
--enable-muxer=rtsp \
--enable-demuxer=sdp \
--enable-muxer=fifo \
--enable-muxer=tee \
\
--enable-parser=h264 \
--enable-parser=aac \
\
--enable-protocol=file \
--enable-protocol=tcp \
--enable-protocol=rtmp \
--enable-protocol=cache \
--enable-protocol=pipe \
\
--enable-filter=aresample \
--enable-filter=allyuv \
--enable-filter=scale \
--enable-libfreetype \
\
--enable-indev=v4l2 \
--enable-indev=alsa \
--enable-indev=alsa \
--enable-outdev=alsa \
\
--enable-omx \
--enable-omx-rpi \
--enable-encoder=h264_omx \
\
--enable-mmal \
--enable-hwaccel=h264_mmal \
--enable-decoder=h264_mmal \
\
配置编译安装
sh config_ffmpeg.sh
make -j4
sudo make install
可能遇到的错误
执行 sh config_ffmpeg.sh 发生的错误:
1、ERROR: OMX_Core.h not found
2、WARNING: Option --enable-hwaccel=h264_mmal did not match anything
解决办法
sudo apt-get install libomxil-bellagio-dev
启动ffmpeg开始推流
ffmpeg -s 720x480 -i /dev/video0 -b:v 2000000 -c:v h264_omx -f flv rtmp://119.23.46.140:1935/hls
这里较新版本的树莓派系统可能会报[h264_omx @ 0x7bf480] /opt/vc/lib/libopenmaxil.so not found的问题,博主研究后发现是树莓派full系统升级之后删除或者迁移了部分第三方软件导致的,可通过降低版本解决,推荐版本参考上文。
最终效果
经过测试可以稳定到30fps左右。(视频清晰度可以通过调节参数得到进一步提升,这里不再做过多研究)