Nginx集成nginx-http-flv-module:一站式搭建支持RTMP、HLS与HTTP-FLV的流媒体服务器
1. 为什么选择nginx-http-flv-module搭建流媒体服务器现在做直播开发的朋友们应该都遇到过这样的烦恼RTMP协议延迟低但浏览器不支持HLS兼容性好但延迟高得让人抓狂。我去年给一个教育机构做在线课堂项目时就深有体会当老师提问时学生要等5-10秒才能回应课堂互动体验非常糟糕。后来改用nginx-http-flv-module方案后延迟直接降到1秒内效果立竿见影。nginx-http-flv-module这个神器其实是nginx-rtmp-module的增强版它最大的优势就是能同时支持RTMP、HLS和HTTP-FLV三种协议。简单来说就是RTMP负责接收推流比如用OBS推流HTTP-FLV给网页端提供低延迟播放HLS作为保底方案兼容苹果设备实测下来HTTP-FLV的延迟基本能控制在1-3秒而传统HLS通常要6秒以上。这个差距在电商直播带货时特别明显——主播喊3、2、1上链接时用HLS的用户看到的是主播还在介绍产品而用HTTP-FLV的观众已经能抢购了。2. 环境准备与模块编译2.1 安装必备依赖在开始之前建议使用Ubuntu 20.04 LTS或CentOS 7以上系统。我习惯先用下面这条命令把所有基础依赖装齐# Ubuntu/Debian sudo apt-get install -y build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev git # CentOS/RHEL sudo yum install -y gcc-c pcre pcre-devel zlib zlib-devel openssl openssl-devel这里有个小坑要注意openssl版本最好在1.1.1以上否则可能遇到TLS协议兼容性问题。曾经有次在CentOS 7上默认装的openssl 1.0.2导致HLS在iOS上播放异常折腾了半天才发现是这个问题。2.2 下载源码并编译我推荐用nginx 1.20.x的稳定版和nginx-http-flv-module的v1.2.10版本搭配最稳。具体操作# 下载源码 wget http://nginx.org/download/nginx-1.20.2.tar.gz git clone https://github.com/winshining/nginx-http-flv-module.git # 解压并编译 tar zxvf nginx-1.20.2.tar.gz cd nginx-1.20.2 ./configure --prefix/usr/local/nginx \ --add-module../nginx-http-flv-module \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_flv_module \ --with-http_mp4_module make -j$(nproc) sudo make install编译参数说明--with-http_ssl_module支持HTTPS推流/拉流--with-http_v2_module开启HTTP/2提升传输效率--with-http_flv_module和--with-http_mp4_module支持点播功能编译完成后可以用nginx -V查看是否包含nginx-http-flv-module模块。如果看到下面这样的输出就说明成功了nginx version: nginx/1.20.2 built with OpenSSL 1.1.1f configure arguments: --add-module../nginx-http-flv-module3. 服务器配置详解3.1 基础配置模板这是我经过多个项目验证的稳定配置直接保存为/usr/local/nginx/conf/nginx.confworker_processes auto; rtmp_auto_push on; events { worker_connections 1024; } rtmp { server { listen 1935; chunk_size 4096; application live { live on; meta off; # 兼容flv.js # HLS配置 hls on; hls_path /tmp/hls; hls_fragment 2s; hls_playlist_length 6s; # HTTP-FLV配置 dash on; dash_path /tmp/dash; # 录制功能可选 record all; record_path /var/rec; record_unique on; } } } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; location / { root html; index index.html; } # HLS播放端点 location /hls { types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } alias /tmp/hls; add_header Cache-Control no-cache; add_header Access-Control-Allow-Origin *; } # HTTP-FLV播放端点 location /flv { flv_live on; chunked_transfer_encoding on; add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Credentials true; } # 统计页面 location /stat { rtmp_stat all; rtmp_stat_stylesheet stat.xsl; } location /stat.xsl { root /path/to/nginx-http-flv-module; } } }3.2 关键参数调优根据我的实战经验这几个参数对性能影响最大hls_fragment切片时长建议2-4秒值越小延迟越低但会增加服务器负载值越大兼容性越好但延迟会升高chunk_sizeRTMP分块大小直播推荐4096点播可以加大到8192worker_processes工作进程数设置为CPU核心数用auto让nginx自动检测也行worker_connections单个进程连接数计算公式最大连接数 worker_processes × worker_connections直播场景建议至少10244. 推流与播放实战4.1 使用OBS推流OBS设置很简单进入设置→推流服务选择自定义服务器填rtmp://你的服务器IP/live串流密钥随便填比如test123推流地址实际是rtmp://你的服务器IP/live/test1234.2 多种播放方式对比根据我的测试数据播放方式延迟兼容性适用场景RTMP1-3秒差桌面端应用HTTP-FLV1-3秒中网页直播HLS6-30秒极好移动端/跨平台网页播放推荐方案script srchttps://cdn.jsdelivr.net/npm/flv.jslatest/script video idvideoElement controls/video script if (flvjs.isSupported()) { var flvPlayer flvjs.createPlayer({ type: flv, url: http://你的服务器IP/flv?applivestreamtest123 }); flvPlayer.attachMediaElement(videoElement); flvPlayer.load(); flvPlayer.play(); } /script移动端HLS备用方案video srchttp://你的服务器IP/hls/test123.m3u8 controls/video5. 常见问题排查问题1推流成功但播放黑屏检查OBS输出格式是否为H.264 AAC确认nginx的hls_path目录有写入权限问题2HTTP-FLV延迟突然增大用netstat -antp查看服务器连接数调整worker_connections和worker_processes问题3HLS在iOS上无法播放确保m3u8文件的Content-Type是application/vnd.apple.mpegurl检查TS切片是否包含AAC音频流问题4高并发时卡顿开启nginx的rtmp_auto_push多worker模式考虑用ffmpeg做转码分流记得第一次上线时遇到个奇葩问题某些安卓手机播放FLV会花屏。后来发现是这些设备不支持High Profile的H.264编码在OBS里把编码配置改为Main Profile就解决了。这也提醒我们实际部署时一定要用真实设备做充分测试。

相关新闻

第23篇:文件管理与目录结构设计 — 规范化的数据持久化

第23篇:文件管理与目录结构设计 — 规范化的数据持久化

第23篇:文件管理与目录结构设计 — 规范化的数据持久化 一、为什么需要规范化的文件管理? 1.1 第一性原理思考 任何一个后端服务,最终都要与"持久化"打交道。所谓持久化,就是把内存中的数据以某种形式保存到磁盘上&…

2026/7/15 5:51:20 阅读更多 →
C++命名空间详解:从基础概念到工程实践

C++命名空间详解:从基础概念到工程实践

1. 项目概述:为什么C需要命名空间?如果你刚开始接触C,尤其是在尝试写一个稍微复杂点的程序,或者引入了第三方库之后,大概率会遇到一个编译错误:“error: ‘xxx’ was not declared in this scope”&#xf…

2026/7/15 5:47:19 阅读更多 →
玩机进阶--从“设备内部问题”弹窗到系统核心文件修改的避坑指南

玩机进阶--从“设备内部问题”弹窗到系统核心文件修改的避坑指南

1. 当"设备内部问题"弹窗出现时,到底发生了什么?每次开机看到那个刺眼的警告弹窗,就像手机在对你喊"我生病了"。这个提示通常出现在修改过系统文件或刷入第三方ROM后,它的真实身份其实是Android系统的内核验证…

2026/7/15 5:45:18 阅读更多 →

最新新闻

Claude Mythos:AI安全能力跃迁与推理时计算范式变革

Claude Mythos:AI安全能力跃迁与推理时计算范式变革

1. 这不是一次普通升级:Mythos 的真实分量,远超所有 headline“Anthropic 发布 Claude Mythos”——如果你只扫了一眼这个标题,把它和过去半年里几十个“新模型发布”的新闻混为一谈,那你就错过了今年 AI 领域最值得深挖的一次技术…

2026/7/15 6:41:42 阅读更多 →
C++编译错误深度解析:从“未声明的标识符”到工程化实践

C++编译错误深度解析:从“未声明的标识符”到工程化实践

1. 项目概述:从“未声明的标识符”说起 如果你刚开始接触C,或者即便有了一些经验,在编译代码时,那个刺眼的“error: ‘xxx’ was not declared in this scope”或者“error C2065: ‘xxxx’: 未声明的标识符”绝对是你绕不开的“老…

2026/7/15 6:31:38 阅读更多 →
OpenGL 实例化渲染:构建小行星带 (Asteroid Field)

OpenGL 实例化渲染:构建小行星带 (Asteroid Field)

OpenGL 实例化渲染:构建小行星带 (Asteroid Field) 在三维场景中,渲染大量相似的物体(例如草地上的叶片、森林中的树木、粒子系统中的微粒,或者太空游戏中的小行星带)是非常普遍的需求。如果采用传统的方法为每一个物体…

2026/7/15 6:31:38 阅读更多 →
跨端支付实战:利用SDK将APP支付参数转换为H5链接

跨端支付实战:利用SDK将APP支付参数转换为H5链接

1. 为什么需要将APP支付参数转换为H5链接移动支付已经成为我们日常生活中不可或缺的一部分,但你是否遇到过这样的尴尬场景:朋友发来一个APP内的支付链接,但你的手机上没有安装这个APP,或者你正在使用电脑浏览网页时无法直接完成支…

2026/7/15 6:29:38 阅读更多 →
Boost转换器DCR电流检测原理与LM25122实战设计详解

Boost转换器DCR电流检测原理与LM25122实战设计详解

1. 项目概述:为什么DCR检测在Boost设计中如此重要?在开关电源设计领域,尤其是面对车载电子、工业设备这类对效率、成本和可靠性都极为苛刻的应用时,工程师们总是在寻找一个平衡点。我们既希望系统能精确地感知电流,以实…

2026/7/15 6:29:38 阅读更多 →
JBT62轴流风机结构设计实战:从参数计算到部件选型

JBT62轴流风机结构设计实战:从参数计算到部件选型

1. JBT62轴流风机设计基础:参数计算与工况分析第一次接触JBT62轴流风机设计时,我被各种专业术语搞得头晕眼花。直到在车间跟老师傅拆解了一台故障风机,才真正理解参数计算的意义——它们就像风机的"体检报告",每个数字都…

2026/7/15 6:27:37 阅读更多 →

日新闻

YOLO11 改进 - 特征融合 | STFFM空间时间特征融合模块,强化时空互补、抑制噪声,助力小目标检测高效涨点

YOLO11 改进 - 特征融合 | STFFM空间时间特征融合模块,强化时空互补、抑制噪声,助力小目标检测高效涨点

前言 本文介绍了面向红外小目标检测的时空特征融合模块——STFFM,用于增强复杂背景下目标与噪声、杂波的区分能力。该方法通过拼接空间特征与时间/运动特征,并结合通道注意力、空间注意力和残差增强机制,实现对关键语义通道与疑似目标区域的…

2026/7/15 0:01:00 阅读更多 →
YOLO26 改进 - 特征融合 | STFFM空间时间特征融合模块,强化时空互补、抑制噪声,助力小目标检测高效涨点

YOLO26 改进 - 特征融合 | STFFM空间时间特征融合模块,强化时空互补、抑制噪声,助力小目标检测高效涨点

前言 本文介绍了面向复杂背景小目标检测的时空特征融合模块——STFFM。该模块通过空间分支与时间/运动分支的特征拼接,引入通道注意力和空间注意力对融合特征进行自适应筛选,并结合残差增强与通道压缩,突出目标区域、抑制背景噪声。我们将 S…

2026/7/15 0:01:00 阅读更多 →
行星减速机为什么能提高扭矩?从功率守恒到输出扭矩校核

行星减速机为什么能提高扭矩?从功率守恒到输出扭矩校核

一、为什么减速以后扭矩会增大 旋转机械的功率、转速和扭矩之间存在以下关系: T 9550 P n 其中: T为扭矩,单位Nm; P为功率,单位kW; n为转速,单位r/min。 在功率基本不变的情况下:…

2026/7/15 0:03:00 阅读更多 →

周新闻

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨 在一个阳光明媚的上午,互联网大厂的面试官坐在桌前,准备迎接他的面试候选人——燕双非,一个以搞笑和幽默著称的程序员。第一轮提问 面试官:燕双非,作…

2026/7/14 16:53:23 阅读更多 →
车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估在智能驾驶和车联网技术快速发展的今天,车载以太网作为新一代车载网络的核心传输技术,其物理层性能直接决定了数据传输的可靠性和稳定性。1000BASE-T1作为当前主流的…

2026/7/14 14:00:13 阅读更多 →
VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战指南嵌入式开发领域正经历一场工具链的静默革命。当传统Keil用户首次打开VSCode的扩展市场搜索EIDE时,往往会惊讶于这个看似简单的插件竟能重构十余年的开发习惯。本文将揭示如何用五个精准步骤&#xff0…

2026/7/14 7:15:24 阅读更多 →

月新闻