树莓派FFmpeg搭配rtmp服务器实现直播推流(一)


移步原文网站,浏览最新博客。

安装环境要求

硬件

树莓派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配置启动成功
image.png

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系统升级之后删除或者迁移了部分第三方软件导致的,可通过降低版本解决,推荐版本参考上文。

最终效果
image.png
经过测试可以稳定到30fps左右。(视频清晰度可以通过调节参数得到进一步提升,这里不再做过多研究)

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

red-fox-yj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值