公司动态
如何用 Nginx-HTTP-FLV-Module 搭建低延迟直播流?
如何用 Nginx-HTTP-FLV-Module 搭建低延迟直播流【免费下载链接】nginx-http-flv-moduleA media streaming server based on nginx-rtmp-module. In addtion to the features nginx-rtmp-module provides, HTTP-FLV, GOP cache, VHosts (one IP for multi domain names) and JSON style statistics are supported now.项目地址: https://gitcode.com/gh_mirrors/ng/nginx-http-flv-module如果你正在搭建视频站点多半遇过这样的尴尬HLS 方案兼容性虽好延迟却稳稳卡在 5 秒开外弹幕、连麦根本跟不上节奏而 RTMP 延迟虽低浏览器又没法直接播放。Nginx-HTTP-FLV-Module正是为这种场景而生的——它基于 nginx-rtmp-module 扩展在保留 RTMP 推流能力的同时让 Nginx 原生支持 HTTP-FLV 拉流、GOP 缓存、VHost 多域名和 JSON 风格统计配合 flv.js 就能在浏览器里实现秒开级低延迟直播尤其适合直播带货、在线课堂、演唱会转播这类对延迟敏感的 Web 直播场景。直播延迟 5 秒怎么降先搞懂 HTTP-FLV 与 HLS 的取舍HLS 的原理是把视频切成一个个小分片.ts再交给播放器拼接分片越多延迟越高天然不适合互动场景RTMP 延迟虽低但需要 Flash 插件或专用播放器浏览器支持早已名存实亡。HTTP-FLV 走的是折中路线视频流以 FLV 容器格式直接在 HTTP 长连接上流式传输播放器拿到第一帧就能渲染延迟通常能压到 1~2 秒同时兼容 80/443 端口穿透性好、CDN 友好。一句话版本推流继续用成熟的 RTMP拉流改用 HTTP-FLV浏览器端交给 flv.js这就是本模块的完整工作流。上图就是模块官方提供的 flv.js 播放测试效果——地址栏里的/flv/路径、播放器下方的开始/暂停/跳转控制正是 HTTP-FLV 拉流的典型调试界面。三步完成 FLV 模块编译并接入 Nginx本模块不提供独立可执行文件所有能力都通过编译进 Nginx 来生效整条主线只有三步第一步拉取模块源码并准备 Nginx 源码包git clone https://gitcode.com/gh_mirrors/ng/nginx-http-flv-moduleNginx 版本建议不低于 1.2.6若按动态模块编译则需 1.9.11另外记得提前装好编译依赖GCC、make需要 HTTPS 或正则时再加 OpenSSL、PCRE。第二步编译并安装./configure --add-module/path/to/nginx-http-flv-module make make install⚠️ 一个容易犯的错不要和 nginx-rtmp-module 同时编译。本模块已包含其全部功能两者叠加会冲突。第三步验证并启动nginx -V输出中能看到--add-module...nginx-http-flv-module即说明模块已挂载然后nginx启动、nginx -s reload重载配置即可。flv_live 与 gop_cache 两个高频指令这样配最稳配置只需关心两个地方http块里开拉流rtmp块里开推流与缓存。卡片一flv_live on;HTTP 拉流开关http { server { listen 80; location /live { flv_live on; chunked_transfer_encoding off; # 兼容不支持 chunked 的播放器 } } }开启后拉流地址格式为http://域名/live?appmyappstreammystream其中app要和 rtmp 里的 application 名一致stream要和推流名一致。常见误区只配了 location 却忘了带app/stream查询参数或默认 1935 端口被改掉后没在 URL 里加portxxx。卡片二gop_cache on;GOP 缓存开关rtmp { server { listen 1935; application myapp { live on; gop_cache on; # 新观众加入秒开首帧 } } }它的作用是缓存最近一个 GOP关键帧组让后进入的观众不用干等下一个关键帧瞬间出画面。常见误区把gop_cache写进 http 的 location 里——它只属于 rtmp 块另外开启wait_video/wait_key会影响纯音频流需要注意。配好之后推流与播放就是两条命令的事# 推流不转码直接复用原编码 ffmpeg -re -i input.mp4 -c copy -f flv rtmp://example.com/myapp/mystream # 播放HTTP-FLV http://example.com/live?appmyappstreammystream如上图所示同一路流既可以给 JW Player 走 RTMP也可以给 VLC 走 HTTP-FLV一套推流多端分发这正是本模块的实用价值所在。新手必看4 个 HTTP-FLV 拉流常见坑与排查清单 黑屏 / 一直不出画面flv.js 只支持H.264 视频 AAC/MP3 音频。用ffprobe查一下推流编码不匹配就加转码参数或干脆换用 VLC 这类全能播放器验证。 拉流 404 或无限转圈八成是名字对不上。核对三处——URL 里的app与 rtmp 的application名、stream与 ffmpeg 推流名、HTTP 与 RTMP 端口是否写对。 画面要等好几秒才出来确认gop_cache on已生效且推流端有关键帧输出纯音频或异常编码的流会触发兼容性问题。 命令行播放 URL 被截断shell 会把 URL 里的当成后台符用 ffplay 播放时必须给整条 URL 加双引号。 附赠一条想看在线人数等统计却总是空白把worker_processes设为 1或用rtmp_stat_format json输出 JSON 格式统计接入监控更省心。总结与延伸官方文档、核心源码与下一步学习建议完整指令表与示例配置请直接读 README.md中文读者可看 README.CN.md项目自带的 test/nginx.conf 是一份可以直接抄作业的现成配置。想深入源码HTTP-FLV 拉流逻辑在 ngx_http_flv_live_module.cGOP 缓存在 ngx_rtmp_gop_cache_module.cRTMP 核心则在 ngx_rtmp.c。下一步建议按这个顺序进阶先体验单 IP 多域名的 VHost 特性再接入 JSON 统计做监控告警最后尝试 HLS/DASH 混合输出覆盖更多终端。当你配好flv_live与gop_cache、看到画面秒开的那一刻会发现低延迟直播其实没那么神秘。【免费下载链接】nginx-http-flv-moduleA media streaming server based on nginx-rtmp-module. In addtion to the features nginx-rtmp-module provides, HTTP-FLV, GOP cache, VHosts (one IP for multi domain names) and JSON style statistics are supported now.项目地址: https://gitcode.com/gh_mirrors/ng/nginx-http-flv-module创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考