Nginx RTMP 流媒体服务器:从编译到推流配置的完整指南

发布时间:2026/8/28 16:40:21
Nginx RTMP 流媒体服务器:从编译到推流配置的完整指南 Nginx RTMP 流媒体服务器从编译到推流配置的完整指南【免费下载链接】nginx-rtmp-moduleNGINX-based Media Streaming Server项目地址: https://gitcode.com/gh_mirrors/ng/nginx-rtmp-modulenginx-rtmp-module 让标准 Nginx 变成一台 Nginx RTMP 流媒体服务器接收 RTMP 推流、分发直播流并可实时转封装成 HLS 分片。按本文走一遍你能独立完成模块编译集成与最小可用的 RTMP 推流、HLS 播放配置。为什么需要它中小项目里最常见的两类需求一是接收推流端打来的 RTMP 流并转成 HLS 给 Web/移动端播放二是把直播流转封装成 m3u8 ts 分片借助 Nginx 本身做高并发分发。两者都不需要再额外部署一台独立流媒体服务器一个 Nginx 进程就能全部承担。环境准备Linux 系统CentOS / Ubuntu / Debian 均可已安装 gcc、make 及 pcre、zlib、openssl 开发库一份 Nginx源码包源码编译版非 yum/apt 装好的二进制包且版本与你的系统库兼容已下载本模块源码git clone 仓库https://gitcode.com/gh_mirrors/ng/nginx-rtmp-module 编译集成步骤模块以--add-module参数在 configure 阶段注入这是整条流程里最关键的一步路径必须指向模块根目录即含config文件的那一层cd /usr/local/src/nginx-版本号 ./configure --prefix/usr/local/nginx \ --add-module/usr/local/src/nginx-rtmp-module make make install--add-module路径写错或缺config文件时configure 会直接报错先检查目录层级若之前编译过其他模块configure 里原有参数照旧保留--add-module追加即可make install会覆盖旧二进制建议先cp备份sbin/nginx最小 RTMP 配置改nginx.conf只保留live推流和hls转封装两个 applicationrtmp { server { listen 1935; chunk_size 4096; application live { allow publish 127.0.0.1; deny publish all; live on; } application hls { live on; hls on; hls_path /var/www/hls; hls_fragment 10s; } } }listen 1935RTMP 服务端口推流地址即rtmp://主机:1935/live/流名chunk_size 4096RTMP 交互块大小减少握手开销默认即可allow publish 127.0.0.1; deny publish all只放行本机推流上线后把白名单 IP 换成真实推流端地址hls_pathts 分片与 m3u8 的落地目录Nginx worker 所属用户对它必须可写提前mkdir -p建好hls_fragment 10s单个 ts 片段的时长直播场景 10s 左右较常见HLS 文件还要能被浏览器请求到在http块补一个 locationhttp { server { listen 8080; location /hls { root /var/www; types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } add_header Cache-Control no-cache; } } }root /var/www配合hls_path /var/www/hls播放地址即http://主机:8080/hls/流名.m3u8types两个 MIME 类型必须写全否则部分播放器会拒播验证与上线⚠️ 改完配置先-t校验通过后再 reload切忌直接重启/usr/local/nginx/sbin/nginx -t /usr/local/nginx/sbin/nginx -s reload ss -lnp | grep 1935nginx -t输出syntax is ok / test is successful才说明语法通过ss输出里出现1935端口监听即 RTMP 服务已就绪用推流端试推rtmp://127.0.0.1:1935/live/test随后看/var/www/hls下是否生成test.m3u8和 ts 片段常见问题推流被拒NetStream 报 permission / 拒绝连接先看两处allow publish的白名单 IP 与推流端出口 IP 是否一致error.log里的拒绝记录。allow/deny 按书写顺序逐条匹配allow 必须写在 deny 前面。HLS 请求 404按顺序排查流是否正在推不推流就不会有 m3u8 生成hls_path目录是否可写HTTP location 的root与types是否与上文一致。1935 端口被占用执行ss -lnp | grep 1935找到占用进程停掉旧的 Nginx/媒体服务或在rtmp server块里改listen到其他空闲端口。结语编译一次、配置两段你就有了一台能收流、能分发的 Nginx RTMP 流媒体服务器。更多指令细节可查仓库doc/README.md遇到问题可以到 nginx-rtmp 官方讨论组求助。【免费下载链接】nginx-rtmp-moduleNGINX-based Media Streaming Server项目地址: https://gitcode.com/gh_mirrors/ng/nginx-rtmp-module创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考