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

资讯详情

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

nginx http flv 直播服务快速上手:nginx-http-flv-module 从零到一完整指南

nginx http flv 直播服务快速上手:nginx-http-flv-module 从零到一完整指南 nginx http flv 直播服务快速上手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-modulenginx-http-flv-module 是基于 nginx-rtmp-module 二次开发的流媒体服务器模块它在保留 RTMP 全部能力的同时新增了 HTTP-FLV 直播、GOP 缓存、虚拟主机VHost与 JSON 风格统计等特性为「浏览器无插件看直播」提供了轻量可靠的后端支撑。上图来自项目自带的演示样例浏览器通过 flv.js 播放 nginx http flv 直播流页面提供了开始、暂停、跳转等完整控制能力。一、HTTP-FLV 凭什么成为直播新宠 Adobe 在 2020 年底停止支持 Flash 之后依赖 Flash 插件播放的 RTMP 在浏览器里基本走进了死胡同。HTTP-FLV 的登场恰到好处它把 FLV 封装好的音视频数据直接装进 HTTP 响应浏览器借助 Media Source ExtensionsMSE即可原生播放无需安装任何插件。传输方式端到端延迟浏览器支持情况适用场景RTMP1~3 秒需 Flash 插件推流上行的主流选择HTTP-FLV2~5 秒支持 MSE 的浏览器均可低延迟直播拉流HLS5~15 秒全面支持兼顾兼容性的直播/点播nginx http flv 模块正是瞄准了这个方向推流端继续走 RTMP播放端换成 HTTP-FLV一套服务承载两种协议互不冲突升级成本极低。二、开工前的准备清单 Nginx 源码包建议 1.2.6 及以上版本若想编译成动态模块则需 1.9.11GCC 与 GNU makeUnix 系系统上的编译环境FFmpeg 或 OBS用于推流VLC 或 flv.js用于验证播放效果PCRE / OpenSSL / zlib按需提供正则、加密与压缩能力这些依赖大多可以通过系统包管理器一键安装无需手动编译只有 Nginx 源码和模块源码需要我们自己下载。三、三步完成模块编译 ️第一步把模块源码克隆到本地git clone https://gitcode.com/gh_mirrors/ng/nginx-http-flv-module第二步进入 Nginx 源码目录在 configure 阶段挂载模块然后编译安装./configure --add-module/path/to/nginx-http-flv-module make make install如果你更倾向动态加载把--add-module换成--add-dynamic-module即可安装后配合load_module指令在配置中启用。第三步验证模块是否被正确识别nginx -V输出信息里应能看到--add-module对应的路径。看到它说明模块已经成功编译进 Nginx。顺带认识一下源码包config是模块的编译入口脚本ngx_rtmp*.c构成 RTMP 核心逻辑ngx_http_flv_live_module.c是 HTTP-FLV 的具体实现hls/与dash/两个子目录分别负责 HLS、DASH 切片test/nginx.conf提供了一份可直接参考的完整配置示例samples/存放播放效果截图。四、写一份最小直播配置 ✍️在 nginx.conf 中同时开启rtmp与http两个配置块rtmp { server { listen 1935; application myapp { live on; gop_cache on; } } } http { server { listen 80; location /live { flv_live on; } } }各指令含义一目了然listen 1935RTMP 默认端口推流走这里flv_live on让/live这个 location 对外提供 HTTP-FLV 拉流这是本模块的核心指令gop_cache on缓存关键帧让新进直播间的观众秒开画面。推流ffmpeg 直接复制音视频流不做转码ffmpeg -re -i 视频文件.mp4 -c copy -f flv rtmp://服务器IP:1935/myapp/mystream拉流浏览器或 VLC 打开下面的地址http://服务器IP:80/live?appmyappstreammystreamURL 中的app对应 rtmp 块里的 application 名称stream对应推流时声明的流名两个参数缺一不可。配置写好后启动方式也很简单默认安装的 Nginx 直接执行nginx自定义安装则需要用完整路径例如/usr/local/nginx/sbin/nginx。上图展示了同一路直播源被多种播放器同时消费的场景左侧 JW Player 走 RTMP右侧 VLC 播放 HTTP-FLV验证了两种协议共存互不干扰。五、一条命令让配置生效 ⚡后续每改一次配置都不必重启服务热重载即可nginx -s reloadreload 会先校验新配置语法通过后由新 worker 平滑接管已建立的连接不受影响非常适合线上环境反复调参。六、进阶玩法把直播服务武装到牙齿 虚拟主机VHost配置多个server块并用server_name支持通配匹配单 IP 即可绑定多个域名JSON 风格统计在 stat location 里加rtmp_stat_format json;输出结构化统计数据方便程序化采集多协议输出同一路流可同时开启 HLS 与 DASH兼顾手机与桌面各端chunked 响应开启chunked_transfer_encoding on;实现边收边播进一步压低起播延迟。七、新手最容易踩的四个坑 ⚠️别和 nginx-rtmp-module 一起编译——本模块已包含其全部功能叠加编译会导致冲突flv.js 只认 H.264 视频与 AAC/MP3 音频——推流编码不满足时浏览器会黑屏统计与控制模块在多进程模式下可能取不到数据——建议worker_processes 1;或在listen后加reuseport选项缓解惊群问题个别播放器不支持 chunked 传输——可在 flv_live 对应的 location 中显式声明chunked_transfer_encoding off;。八、写在最后下一步学什么 到这里一套「RTMP 推流 HTTP-FLV 拉流」的最小直播服务已经完整跑通。后续不妨顺着三个方向深入一是研究 GOP 缓存、自动推流等参数在不同负载下的调优策略二是使用控制模块rtmp_control实现踢流、断流等运维操作三是结合 FFmpeg 转码输出多码率流支撑更复杂的业务场景。带着这份基础再去精读官方文档与test/nginx.conf完整示例你会对每个配置项的来龙去脉理解得更透彻。【免费下载链接】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),仅供参考
返回列表