nginx-rtmp-module 完整指南:快速搭建自己的 RTMP 直播服务器
2026/8/21 20:34:52 网站建设 项目流程

nginx-rtmp-module 完整指南:快速搭建自己的 RTMP 直播服务器

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

nginx-rtmp-module 是一个可编译进 nginx 的 C 语言扩展模块,它把 nginx 变成一台 RTMP 流媒体服务器,支持直播推流与多端播放、HLS 切片分发和自动录像。本文带你从零跑通最小可用环境。

🎬 它能帮你做什么

一个模块就能在你的机器上跑起一台轻量直播服务器,典型用法有三种。

直播分发:一个主播推流,多个观众同时播放同一路流,就像电视频道一样。这是该模块最核心的"TV 模式",一条live on就能开启。

移动端分发:把 RTMP 直播流转成 HLS(面向互联网的切片分发协议)的 m3u8 播放列表加 ts 分片,iPhone、Android 播放器都能直接播放。

录像回放:把推上来的流按 FLV 格式自动录到磁盘,适合直播存档和事后回放。

这是官方测试播放页(test/www 下 JWPlayer 页面)的背景图,流打通后,播放器里就会播放实时画面。

安装前准备:环境与依赖

准备很简单:一台 Linux、一套编译器、一份 nginx 源代码。

  • 操作系统:推荐 Linux,模块也支持 macOS 和 FreeBSD;Windows 支持有限,exec、静态拉流等功能不可用。
  • 编译器:gcc 和 make,绝大多数发行版自带或包管理器里就有。
  • nginx 源代码:这个模块只能编译进 nginx,不是独立程序,也没有单独的安装包。你需要一份 nginx 源码包并解压。
  • ffmpeg / ffplay:仅用于后文推流、拉流验证,可选,用包管理器装即可。

验证环境就绪,运行gcc --versionmake --version,两条命令都能打印版本号就可以继续。

⚠️ 不要试图用 yum 或 apt 直接安装 nginx-rtmp-module,仓库里没有系统包,必须走源码编译。

安装步骤:编译与安装

整个安装就是三步:克隆模块、配置编译、安装。

先把模块源码克隆下来,再进入 nginx 源码目录,用--add-module把模块路径传给 configure,模块源码就会和 nginx 一起被编进去:

git clone https://gitcode.com/gh_mirrors/ng/nginx-rtmp-module cd /path/to/nginx-source # 进入你的 nginx 源码目录 ./configure --add-module=/path/to/nginx-rtmp-module make make install

成功的标志:make结束无报错,make install后在默认安装目录/usr/local/nginx下能看到bin/nginx可执行文件和conf/nginx.conf主配置。

⚠️ 如果你用的是 1.3.14 到 1.5.0 这几个旧版本 nginx,configure 要额外加--with-http_ssl_module,否则编译会失败(新版无需)。

最小可用配置

最短的可运行配置就是 rtmp 块加几条 nginx 基础指令。

打开安装目录下的主配置文件(默认/usr/local/nginx/conf/nginx.conf),补全为下面的内容:

worker_processes 1; events { worker_connections 1024; } rtmp { server { listen 1935; # RTMP 默认端口 application myapp { # 应用名,推流地址里的 /myapp live on; # 开启直播间 } } }

listen 1935是 RTMP 的默认端口,application myapp里的名字会出现在推流地址rtmp://主机/myapp/流名中。后续想在线查看统计数据、加 HLS 分发,可以参照测试样例配置 test/README.md 里的说明扩展。

验证与排错:常见坑怎么解决

验证分三步:先查语法,再启动,最后确认端口在监听。

nginx -t # 检查配置语法 nginx # 启动(已运行则用 nginx -s reload) ss -lnt | grep 1935 # 确认 1935 在监听

nginx -t输出syntax is ok / test is successfulss里能看到一行 1935 端口的监听记录,说明服务端就绪。

然后开两个终端,一个推流、一个拉流:

ffmpeg -re -i ~/movie.avi -f flv rtmp://localhost/myapp/mystream ffplay rtmp://localhost/myapp/mystream

ffplay 窗口里能正常播放影片,整条链路就跑通了;仓库的 test 目录里还有 rtmpdump 存流脚本可参考。

高频坑

端口冲突怎么办:error.log 里出现bind() failed ... Address already in use,说明 1935 被占。用ss -lntp | grep 1935查出占用进程,停掉它或在配置里换一个端口。

推流报 Connection refused:通常是 nginx 没启动、或 rtmp 块没写进生效的配置里。先看 error.log,再确认nginx -V输出里包含--add-module参数。

HLS 的 m3u8 返回 404:HLS 要求 hls_path 目录提前存在,且要在 http 块里配好 location 对外提供分片;另外推上来的流必须是 H264/AAC 编码,否则切片不生成。

至此,你已经有了一台能推流、播放、录像的直播服务器。转码、推流中继等进阶玩法,可对照 README.md 里的完整 nginx.conf 示例和 test/README.md 按需扩展。

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

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

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

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

立即咨询