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 输出运行状态。逐项说明关键指令:
| 指令 | 作用 | 建议值 / 备注 |
|---|---|---|
| listen | RTMP 监听端口 | 1935 是行业默认值 |
| chunk_size | RTMP 分块大小,影响吞吐与内存 | 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_stylesheet | HTTP 输出统计 | 配套项目根目录的 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),仅供参考