尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

nginx-rtmp-module 完整教程:RTMP 推流与 HLS 转封装一次跑通

nginx-rtmp-module 完整教程:RTMP 推流与 HLS 转封装一次跑通 nginx-rtmp-module 完整教程RTMP 推流与 HLS 转封装一次跑通【免费下载链接】nginx-rtmp-moduleNGINX-based Media Streaming Server项目地址: https://gitcode.com/gh_mirrors/ng/nginx-rtmp-modulenginx-rtmp-module 是为标准 Nginx 补上流媒体能力的 C 语言模块收下 RTMP 推流再转封装成 HLS 通过 HTTP 分发。本文覆盖从环境准备、rtmp 模块编译、nginx rtmp 配置到启动验证与排错的全链路操作。模块定位为什么用它做直播标准 Nginx 只会处理 HTTP不懂 RTMP 握手和流转发。把这个模块以静态方式编译进同一份 nginx 可执行文件后它就能在 1935 端口接收推流连接用live on做到一路推流多路转发并把 H264/AAC 流切成 HLS 分片落盘供 HTTP 侧读取播放。适合你不想再维护一套专用流媒体服务器、只想要轻量直播网关的场景。仓库结构很简单核心 C 代码在根目录HLS 和 MPEG-DASH 相关代码分别在hls/、dash/子目录test/nginx.conf里还有一份可直接参考的样例配置。前置条件编译 rtmp 模块前需要备好什么Nginx 源码建议主流稳定版。模块通过 configure 参数注入编译流程装包版 nginx 无法追加必须走源码编译。编译工具链gcc、make以及 nginx 自身依赖的 PCRE、zlib 开发包走 HTTPS 的话再加 OpenSSL 开发包。权限最终以 root 安装到/usr/local/nginx时用sudoHLS 分片目录要确保 nginx worker 用户通常nobody可写这一点后面验证时会再用到。编译参数怎么加把模块装进 Nginx⚙️ 关键只有一个参数--add-module指向模块根目录含config文件的那层而不是某个子目录。git clone https://gitcode.com/gh_mirrors/ng/nginx-rtmp-module cd nginx-1.24.0 # 你的 Nginx 源码目录 ./configure --add-module/path/to/nginx-rtmp-module make make install仓库根目录的config文件是胶水它告诉 Nginx 的构建脚本哪些.c/.h归核心模块、哪些归 HTTP 模块stat、control 两个 HTTP 端点。模块是静态编译的改参数后需要重跑完整的 configure/make 流程不存在单独加载.so的说法。老版本 Nginx1.3.14–1.5.0编译报错时可追加--with-http_ssl_module再试。nginx rtmp 配置RTMP 推流到 hls 的最小闭环推流端与 HLS 输出端各占一个application推流器往hls这个应用推模块负责切分落盘HTTP 侧读回分片链路即通。rtmp { server { listen 1935; # 推流器 URL 里写的那个端口 chunk_size 4096; # 单次传输的数据块大小 application live { live on; # 一对多直播转发核心开关 allow publish 127.0.0.1; # 仅允许本机推流 deny publish all; } application hls { live on; hls on; # 开启 HLS 转封装 hls_path /tmp/hls; # 分片落盘目录 hls_fragment 10s; # 每 10 秒切一个 ts } } }HTTP 侧再补两个 location一个发分片、一个看状态http { server { listen 8080; location /hls { root /tmp; types { video/mp2t ts; application/vnd.apple.mpegurl m3u8; } add_header Cache-Control no-cache; } location /stat { rtmp_stat all; # 在线流列表XML 格式 rtmp_stat_stylesheet stat.xsl; } } }调 HLS 分片时长是个取舍hls_fragment越小首帧越快、卡顿恢复越灵敏但分片数越多、磁盘 IO 越高10s 是常见起点。另注意 HLS 要求源流为 H264/AAC否则转封装会失败。启动验证改完配置怎么热重载 先校验、后重载别直接kill -HUP硬来sudo nginx -t # 语法校验报错先修这里 sudo nginx -s reload # 热重载不中断已连接会话 curl http://127.0.0.1:8080/stat # 打开统计页确认在线流用 ffmpeg 推一路测试流验证闭环ffmpeg -re -i input.mp4 -c:v libx264 -profile:v baseline \ -c:a aac -f flv rtmp://127.0.0.1:1935/hls/demo推起来后几秒内/tmp/hls应出现demo.m3u8和递增的.ts文件浏览器访问http://127.0.0.1:8080/hls/demo.m3u8能看到 m3u8 内容说明 nginx hls 直播链路已通。常见坑与排查方向端口被占ss -lntp | grep 1935看谁在监听或查防火墙是否放行。推流成功但 HLS 目录是空的十有八九是hls_path对 worker 用户不可写或源流不是 H264/AAC。配置里写 rtmp 块却报 unknown directive说明当前二进制根本没编进模块nginx -V确认输出里没有--add-module字样回去重编。m3u8 能取到但播放器黑屏多半是 ts 被缓存或 MIME 类型不对确认types声明和no-cache头都在。按这套流程走下来你的 Nginx 就是一个能收 RTMP 推流、直接对外供 HLS 播放的完整流媒体网关指令细节多到查不过来时再翻仓库自带的样例配置即可。【免费下载链接】nginx-rtmp-moduleNGINX-based Media Streaming Server项目地址: https://gitcode.com/gh_mirrors/ng/nginx-rtmp-module创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表