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

📅 2026/8/22 12:23:53
nginx-rtmp-module 安装配置实战:从零搭建 RTMP 直播服务
nginx-rtmp-module 安装配置实战从零搭建 RTMP 直播服务【免费下载链接】nginx-rtmp-moduleNGINX-based Media Streaming Server项目地址: https://gitcode.com/gh_mirrors/ng/nginx-rtmp-modulenginx-rtmp-module 是一个把 Nginx 从静态文件服务器改造成直播流媒体服务器的扩展模块。装上它Nginx 就能接收 RTMP 推流、做直播转发再把流转成 HLS 分片给浏览器播放。这篇实战带你从零走到第一次试播成功每条命令、每段配置照着敲就能跑通。先搞清楚RTMP 和 HLS 各是什么用一个类比RTMP 是直播的原料HLS 是切块后浏览器能直接播的成品。主播端OBS、ffmpeg 等把音视频通过 RTMP 协议推到服务器走 1935 端口VLC、ffplay 这类 RTMP 播放器能直接拉。但浏览器播不了 RTMPHLS 解决的就是这一步nginx-rtmp-module 把直播流切成一段段 .ts 小分片再生成一个 .m3u8 播放列表浏览器走普通 HTTP 就能播。所以常见玩法是RTMP 负责推流HLS 负责给网页播。动手前环境准备开始之前你只需要凑齐三样东西Nginx 源码1.x 任意较新版本即可下载源码包并解压编译环境Linux 或 macOS装好 gcc或 clang、make外加 Nginx 编译的常规依赖 pcre、zlib模块源码一条命令拉下来。git clone https://gitcode.com/gh_mirrors/ng/nginx-rtmp-module这句把 nginx-rtmp-module 的源码下载到当前目录后面编译时会用到它的路径。编译并把模块集成进 Nginx进入 Nginx 源码目录关键就一个参数./configure --add-module/path/to/nginx-rtmp-module--add-module 把模块的 C 源码一起编进 Nginx 可执行文件——它是静态集成不写进这一步配置里的 rtmp 块就无法识别。路径换成你实际 clone 下来的目录即含有 config 文件的那一层。然后照常规走完make make install编译并覆盖安装新的 nginx 二进制就带上了 RTMP 能力。一份最小可用的流媒体配置编辑你的 nginx.conf。下面这份配置在 30 行以内能同时支撑 RTMP 直播转发和浏览器 HLS 播放worker_processes 1; events { worker_connections 1024; } rtmp { server { listen 1935; chunk_size 4096; application live { live on; hls on; hls_path /var/www/hls; hls_fragment 10s; } } } http { server { listen 80; location /hls { root /var/www; } } }rtmp 块定义推流入口http 块把切片文件发出去。这份配置故意做到最精简每条指令管的事如下指令控制什么listen 1935RTMP 监听端口1935 是协议默认值推流端就找这里chunk_size 4096RTMP 消息拆包大小影响吞吐4096 是常用值live on开启直播转发有人拉流时把推流数据实时转给他hls on开启 HLS 输出边收流边写 .ts 分片和 .m3u8 播放列表hls_path /var/www/hls分片落到磁盘的目录先 mkdir -p 建好且 Nginx 进程要有写权限hls_fragment 10s每个分片时长越小延迟越低但分片文件越多location /hls浏览器拉 .m3u8 的 HTTP 入口对应 hls_path 所在目录启动验证三步走校验、生效、试播第一步校验语法nginx -t看到 syntax is ok 再往下走报错先修配置。第二步让配置生效nginx -s reloadNginx 已在运行就用 reload第一次启动则直接执行 nginx 命令。第三步试播。先开一个终端推流ffmpeg -re -stream_loop -1 -i demo.mp4 -c copy -f flv rtmp://127.0.0.1/live/mystreamffmpeg 把本地视频循环起来按直播节奏推到 live 应用下的 mystream 这一路流。然后任选一路拉RTMP 拉流ffplay rtmp://127.0.0.1/live/mystream浏览器 HLS 播放http://127.0.0.1/hls/mystream.m3u8浏览器打开后先等 2~3 个分片约 20 多秒出画面这是 HLS 的正常延迟不是卡住。新手常踩的 3 个坑⚠️ 报错 unknown directive rtmp模块没编译进去。原因是最初 configure 时漏了 --add-module按编译一节重走 configure、make、make install 即可。改完配置不生效Nginx 不会自动重读配置文件必须 nginx -s reload 一次而且 reload 要求进程已在运行新装的 Nginx 第一次要直接启动。1935 端口起不来错误日志里是 bind() failed端口被占用 netstat -tlnp | grep 1935 找占用者或 permission denied当前用户没权限绑定端口换 root 或给权限。到这里推流、转发、播放三个环节全部打通这份最小配置也够你继续往上叠加录像、鉴权、转推。指令细节可查 官方文档 和 核心源码社区讨论组入口在 README 中有说明。【免费下载链接】nginx-rtmp-moduleNGINX-based Media Streaming Server项目地址: https://gitcode.com/gh_mirrors/ng/nginx-rtmp-module创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考