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

该文详细介绍了如何在树莓派4B上配置和安装nginx及nginx-rtmp-module,用于搭建RTMP服务器。同时,它还指导如何编译安装ffmpeg并使用h264_omx解码器进行摄像头推流,以实现高效的视频流处理。通过这个设置,树莓派可以从csi摄像头采集视频,推送到nginx服务器,供其他客户端拉取播放。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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

安装环境要求

硬件

树莓派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左右。(视频清晰度可以通过调节参数得到进一步提升,这里不再做过多研究)

<think>嗯,用户想知道如何在GitHub或者其他网站上找到关于“实现远程图传”的开源项目。首先,我需要理解“远程图传”具体指的是什么。可能是指远程图像传输,比如通过无线网络传输视频或图像数据,应用在无人机、监控系统或者远程控制等领域。用户可能是个开发者,想要找个现有的开源项目作为参考或者直接使用,节省开发时间。 接下来,我得考虑用户可能不太熟悉如何高效地搜索GitHub或者其他平台。他们可能需要具体的步骤和关键词建议。GitHub的搜索功能可以通过关键词、语言、仓库更新时间等来过滤结果。可能需要指导用户使用正确的关键词,比如“remote video streaming”、“image transmission”或者结合技术术语如“RTSP”、“WebRTC”等。 另外,除了GitHub,还有其他平台如GitLab、Gitee、Bitbucket等,但GitHub是最主要的开源平台。可能需要提到这些,但重点放在GitHub上。还有,用户可能不知道如何评估个开源项目的好坏,比如看star数、最近更新、文档是否完善、社区活跃度等,这些也是需要提醒的。 可能的搜索关键词方面,中文用户可能会用中文搜索,但GitHub上的项目很多是英文的,所以需要中英文关键词结合。例如,“远程图传”对应的英文可能有“remote image transmission”、“video streaming”、“live video streaming”等。同时,技术栈相关的关键词,比如FFmpeg、GStreamer、WebRTC、RTMP等,可能会帮助缩小范围。 用户可能的需求场景包括无人机图传、安防监控、远程协助等,不同的应用场景可能需要不同的协议和技术。比如,低延迟可能需要WebRTC,而高可靠性可能需要RTMP。可能需要建议用户根据具体应用场景选择合适的技术栈。 另外,用户可能对如何搭建和测试这些项目不太熟悉,可能需要简要提到需要的基本环境,比如安装依赖库、配置服务器等。或者建议他们查看项目的README和文档,以及社区讨论的issue部分。 总结下来,回答的结构应该包括: 1. 明确搜索关键词,中英文结合。 2. 使用GitHub的高级搜索技巧(按star数、更新时间等过滤)。 3. 荐相关的技术栈和协议,帮助用户更精确地搜索。 4. 其他平台和资源,如论坛、博客等。 5. 评估项目质量的指标。 6. 可能的实际应用案例或项目示例。 还要注意用户可能遇到的困难,比如语言障碍(英文项目)、环境配置问题,或者项目过时不再维护。需要提醒他们注意这些方面,选择活跃的项目。 最后,可能需要给出个具体的例子,比如在GitHub搜索“remote video streaming”并按星标排序,找到几个高星项目,让用户有直观的参考。或者提到知名的开源项目,比如使用WebRTC实现的某些库,或者基于FFmpeg的工具。</think>在 GitHub 或其他平台查找“实现远程图传”的开源项目,可以按照以下步骤进行: --- ### **1. 明确搜索关键词** - **中文关键词**:`远程图传`、`图像传输`、`视频传输`、`实时图传` - **英文关键词**:`remote video streaming`、`live video transmission`、`image streaming`、`RTSP`、`WebRTC`、`RTMP` - **技术栈相关**:结合具体协议或框架,如 `FFmpeg`、`GStreamer`、`WebRTC`、`HLS`、`MQTT`(物联网场景)等。 --- ### **2. GitHub 高级搜索技巧** - **直接搜索**:在 GitHub 搜索栏输入组合关键词,例如: ```plaintext remote video streaming open source live image transmission webrtc camera streaming ``` - **按语言过滤**:添加编程语言关键词,如 `python`、`C++`、`JavaScript`。 - **按活跃度排序**:筛选 `Stars`(受欢迎程度)、`Recently updated`(最近更新)的项目。 - **示例搜索语法**: ```plaintext "remote image transmission" stars:>100 pushed:>2023-01-01 ``` --- ### **3. 荐搜索方向** - **协议/框架相关项目**: - **WebRTC**:适合低延迟实时传输(如视频通话)。 搜索:`webrtc camera streaming` 示例项目:[aiortc](https://github.com/aiortc/aiortc)(Python 实现的 WebRTC 库) - **RTMP/RTSP**:常用于直播。 搜索:`RTMP server open source` 或 `RTSP camera streaming` 示例项目:[mediamtx](https://github.com/bluenviron/mediamtx)(轻量级媒体服务器) - **MQTT/UDP**:适用于物联网或低带宽场景。 搜索:`MQTT image transmission` - **硬件相关**: - 结合树莓派、无人机等设备,例如: `raspberry pi video streaming` 或 `drone live video github`。 --- ### **4. 其他平台和资源** - **GitLab**、**Gitee**(国内开源平台):搜索类似关键词。 - **技术论坛/社区**: - **Stack Overflow**:查找相关问题荐的代码库。 - **Reddit**、**知乎**:搜索“如何实现远程图传”等讨论帖。 - **开源工具集合**: - **Awesome Lists**(GitHub 上的精选列表),例如:[Awesome Streaming](https://github.com/manuzhang/awesome-streaming)。 --- ### **5. 评估项目质量的指标** - **Star 数量**:超过 100+ 通常更可靠。 - **最近更新时间**:确保项目未过时(如 1 年内有更新)。 - **文档和示例**:是否有清晰的 `README.md` 和代码示例。 - **Issue 和 Pull Request**:查看问题讨论和解决进度,判断社区活跃度。 --- ### **6. 实战案例参考** - **无人机图传**:搜索 `drone video streaming github`,可能找到基于 [MAVLink](https://github.com/mavlink/mavlink) 的开源方案。 - **监控摄像头传输**:尝试 [ZoneMinder](https://github.com/ZoneMinder/ZoneMinder)(开源视频监控软件)。 - **低延迟传输**:使用 [Janus](https://github.com/meetecho/janus-gateway)(WebRTC 服务器)搭建实时视频。 --- ### **总结步骤** 1. 在 GitHub 输入组合关键词,按 `Stars` 或 `Recently updated` 排序。 2. 结合协议(如 WebRTC/RTMP)或硬件(如树莓派)缩小范围。 3. 查看项目文档和 Issue,确认可行性后克隆代码本地测试。 如果需要更具体的项目荐,可以告诉我你的使用场景(如无人机、安防监控、直播等),我可以提供更精准的建议!
评论 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、付费专栏及课程。

余额充值