nginx-rtmp-module 安装配置实战:从零搭建 RTMP 直播服务器
2026/8/21 20:13:50 网站建设 项目流程

nginx-rtmp-module 安装配置实战:从零搭建 RTMP 直播服务器

【免费下载链接】nginx-rtmp-moduleNGINX-based Media Streaming Server项目地址: https://gitcode.com/gh_mirrors/ng/nginx-rtmp-module

nginx-rtmp-module 是一个为 Nginx 扩展直播能力的开源模块,它能让你用一台普通服务器同时实现 RTMP 推流/拉流、HLS 分片点播和多路分发。按本文顺序完成安装与配置后,你将拥有一台可以接受推流、对外分发实时流并通过网页查看运行状态的直播服务器。

1. 项目定位:它能帮你做什么

简单说,nginx-rtmp-module 把 Nginx 从一个 Web 服务器变成媒体流服务器:推流端用 RTMP 协议把音视频推上来,观众端可以直接用 RTMP 播放,也可以通过 HLS 协议(面向移动端的分片播放方式)观看。它适合搭建直播源站、多推多拉的流媒体分发节点,也适合配合 FFmpeg 做转码和录制。

源码按"核心协议 + 独立功能模块"的方式组织:根目录是 RTMP 协议处理与指令解析,hls/dash/子目录分别放 HLS 和 DASH 转封装逻辑,test/目录内置了测试配置和播放/推流页面,装完后可以直接用来验证服务是否可用。

2. 动手前的准备:环境要求与依赖清单

这个模块本身不独立运行,而是编译进 Nginx,所以准备工作的核心是备好 Nginx 源码和编译工具链。

项目要求说明
操作系统Linux(macOS/FreeBSD 亦可)Windows 下部分功能受限
Nginx 源码1.x 版本源码包模块需随 Nginx 一起编译,不能用 yum/apt 装的成品
编译工具gcc、make源码编译必需
依赖库PCRE、zlib 开发包Nginx 常规依赖
FFmpeg可选用于本地推流转测,或配合 exec 指令做转码
端口1935(RTMP)、8080(HTTP 验证)提前确认未被占用

⚠️ 注意:如果你机器上已经用包管理器装过 Nginx,直接升级是加不进这个模块的,必须走源码重新编译。

3. 安装流程:获取源码 → 编译 → 验证集成

3.1 第一步:获取模块源码

先克隆模块仓库,记下模块目录路径,下一步要用到。

git clone https://gitcode.com/gh_mirrors/ng/nginx-rtmp-module

验证点:nginx-rtmp-module/目录下能看到config文件和若干ngx_rtmp_*.c源文件,即源码完整。

3.2 第二步:把模块编进 Nginx

然后进入 Nginx 源码目录,用--add-module指定模块路径进行配置,再依次执行编译与安装。

./configure --add-module=/path/to/nginx-rtmp-module make make install

--with-http_ssl_module在部分 1.3.14~1.5.0 旧版本中需要额外加上,新版本通常不必。

验证点:安装完成后执行nginx -V 2>&1 | grep add-module,输出里能看到--add-module=/path/to/nginx-rtmp-module,说明模块已成功集成;看不到就回到 configure 一步检查路径。

4. nginx.conf 配置详解:最小可用配置 + 关键指令

先给一份能跑通"推流 → 播放 → 查看统计"的最小配置,加在 Nginx 主配置中即可:

rtmp { server { listen 1935; chunk_size 4096; application live { live on; allow publish 127.0.0.1; deny publish all; } } } http { server { listen 8080; location /stat { rtmp_stat all; rtmp_stat_stylesheet stat.xsl; } } }

这份配置的含义是:1935 端口收流,live应用开启直播并只允许本机推流;8080 端口的/stat以 XML 输出运行状态。逐项说明关键指令:

指令作用建议值 / 备注
listenRTMP 监听端口1935 是行业默认值
chunk_sizeRTMP 分块大小,影响吞吐与内存4096 起,卡顿可调大
live on开启直播转发(多播一收多模式)直播应用必开
allow / deny publish控制推流来源 IP生产环境务必限制,防止被恶意占用
hls on / hls_path把流转成 HLS 分片并落盘hls_fragment 5s,目录建议放 tmpfs 如 /tmp/hls,且需 http 里用application/vnd.apple.mpegurl m3u8; video/mp2t ts;声明类型
rtmp_stat / rtmp_stat_stylesheetHTTP 输出统计配套项目根目录的 stat.xsl 可在浏览器直接看页面
exec流事件触发外部命令常配 FFmpeg 做转码/录制,Windows 不支持
push / pull多机分发(推模式/拉模式)搭建分布式流媒体时使用

5. 启动服务与验证:三步确认直播可用

⚠️ 改动配置后先备份原文件,再执行语法校验,确认无误才重载:

nginx -t # 语法检查,须输出 syntax is ok / test is successful nginx -s reload # 平滑重载,不中断已有连接

然后做端到端验证:本机起一个推流端,例如用 FFmpeg 把本地视频按直播节奏推到 1935 端口;接着另一个终端用 ffplay 或test/目录里的网页播放器拉rtmp://localhost/live/流名

成功判定的信号有三个:/stat页面能看到该应用下的 publisher 与 subscriber 计数;拉流端画面正常出图;error.log 中没有publish权限类报错。三个信号齐了,说明整条链路已通。

6. 常见坑速查

  • 改完配置提示unknown directive "rtmp":模块没编进去或用了旧二进制。用nginx -V确认--add-module,没有就重新编译安装。
  • 推流报权限拒绝allow publish限制了来源 IP。检查推流端真实出口 IP 是否在允许列表里,别只写了 127.0.0.1 就跨机推流。
  • HLS 在浏览器/手机端播不了:通常是hls_path目录没建、或 http 层没声明 m3u8/ts 的 Content-Type。先确认分片文件确实落盘,再补 types 声明。
  • Windows 下 exec、auto_push 不生效:属于官方明确的功能限制,不是配置错误,这类需求请换 Linux 环境。

7. 小结

到这里,你已经完成了 nginx-rtmp-module 的编译集成、最小配置和端到端验证,得到一台可用的 RTMP 直播服务器。后续可按需叠加录制(record)、转码(exec + FFmpeg)、多机分发(push/pull)等能力。更多指令细节可查阅项目自带的 wiki 手册与社区讨论组,遇到具体问题也可直接在仓库 issue 中检索或提问。

【免费下载链接】nginx-rtmp-moduleNGINX-based Media Streaming Server项目地址: https://gitcode.com/gh_mirrors/ng/nginx-rtmp-module

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询