核心概念:Nginx 在流媒体中的角色
在开始之前,你需要明白 Nginx 在流媒体中通常扮演什么角色:

-
RTMP/HLS 服务器(核心):
- RTMP (Real-Time Messaging Protocol):Adobe 公司开发的协议,延迟低(通常在1-3秒),主要用于推流和拉流,但因为它基于 Flash,在移动端和现代浏览器上支持不佳,主要用于内部传输或配合 Flash 播放器。
- HLS (HTTP Live Streaming):Apple 公司开发的基于 HTTP 的协议,它将视频流切分成小的
.ts文件,并通过一个.m3u8索引文件来组织,优点是跨平台(浏览器、手机、APP都支持),可穿透防火墙,缺点是延迟较高(通常在10-30秒)。 - 我们的目标:搭建一个同时支持 RTMP 和 HLS 的服务器,这样既可以用于低延迟的内部推流,也可以用于广域网观看。
-
视频点播 服务器:
- Nginx 可以非常高效地提供
.mp4,.flv,.webm等视频文件的在线播放服务,这比直接用 Apache 或 IIS 提供文件要高效得多,因为它能利用X-Accel-Redirect等机制进行内部重定向,避免 PHP/ASP 等脚本解析的开销。
- Nginx 可以非常高效地提供
准备工作:安装 Nginx 及相关模块
标准的 Nginx 不包含 RTMP 和 HLS 模块,所以我们需要使用一个已经编译好这些模块的“发行版”或者自己编译,对于 Windows 用户,使用现成的发行版是最简单的方式。
推荐方案:使用 nginx-for-windows 项目
这是一个专门为 Windows 优化的 Nginx 发行版,已经内置了 nginx-rtmp-module 和 nginx-flv-module(后者功能更多,如支持 HTTP-FLV 协议,延迟更低)。

-
下载
- 访问 GitHub 仓库:https://github.com/illuspas/nginx-windows/releases
- 下载最新的
nginx_x.xx.x.zip压缩包。nginx-1.25.3.zip。
-
安装
- 将下载的
.zip文件解压到一个你喜欢的、没有空格和中文的路径下,D:\nginx。 - 进入解压后的目录,你会看到
nginx.exe、conf、html等文件夹。
- 将下载的
-
验证安装
- 打开命令提示符(CMD),进入到
D:\nginx目录。 - 运行命令:
nginx.exe - 打开浏览器,访问
http://localhost,如果看到 "Welcome to nginx!" 页面,说明 Nginx 已经成功启动。
- 打开命令提示符(CMD),进入到
配置 Nginx 为流媒体服务器
这是最核心的一步,我们需要修改 conf/nginx.conf 文件。

步骤 1:备份原配置文件
在修改之前,请务必将 conf/nginx.conf 复制一份备份,以防配置错误无法启动。
步骤 2:编辑 nginx.conf
用记事本或 VS Code 等文本编辑器打开 conf/nginx.conf,我们将在文件末尾添加 RTMP 和 HLS 的配置。
配置文件示例 (nginx.conf):
# ... (这里保留 Nginx 原有的 http 块配置,用于网页服务) ...
# 在文件最外层添加一个 rtmp 块
rtmp {
server {
listen 1935; # RTMP 标准监听端口
chunk_size 4096;
# 定义一个名为 "live" 的应用
application live {
live on; # 开启直播
record off; # 关闭录制,如果需要保存录像可以设为 on
# HLS 配置
hls on;
hls_path D:/nginx/hls; # HLS 片段的存放目录,请确保此目录存在
hls_fragment 3s; # 每个 HLS 片段的时长
hls_playlist_length 60s; # m3u8 索引文件包含的时长
# HTTP-FLV 配置 (可选,但推荐)
# 它通过 http 协议提供低延迟的 flv 流
flv_live on;
flv_live_record off;
}
}
}
# 在 http 块中添加一个 server 块,用于提供 HLS 和 HTTP-FLV 的拉流地址
http {
# ... (这里保留 Nginx 原有的 http 配置) ...
server {
listen 8080; # 用于拉流的 HTTP 端口
# HLS 拉流配置
location /hls {
# 允许跨域,如果前端页面和服务器不在一个域下,这个很重要
add_header 'Access-Control-Allow-Origin' '*' always;
# 指向 HLS 片段存放目录
alias D:/nginx/hls;
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
}
# HTTP-FLV 拉流配置
location /live {
# 允许跨域
add_header 'Access-Control-Allow-Origin' '*' always;
# flv 模块的拉流配置
flv_live on;
chunked_transfer_encoding on;
add_header 'Access-Control-Allow-Headers' '*';
}
# 可选:提供一个简单的测试页面
location / {
root html;
index index.html;
}
}
}
步骤 3:创建必要的目录
根据上面的配置,我们需要在 D:\nginx 目录下创建一个名为 hls 的文件夹。
# 在 D:\nginx 目录下 mkdir hls
步骤 4:重启 Nginx 使配置生效
在命令提示符中,进入 Nginx 目录,执行以下命令:
# 停止 Nginx nginx.exe -s stop # 启动 Nginx nginx.exe
或者,你也可以直接打开任务管理器,结束 nginx.exe 进程,然后重新双击 nginx.exe 启动。
如何使用你的流媒体服务器?
现在你的服务器已经配置好了!假设你的服务器 IP 地址是 168.1.100。
推流 (使用 OBS 软件)
- 下载并安装 OBS Studio:https://obsproject.com/
- 在 OBS 中设置:
- 打开 OBS,进入“文件” -> “设置”。
- 选择“推流”选项卡。
- 服务选择“自定义”。
- 服务器填入:
rtmp://192.168.1.100:1935/live - 推流密钥填入:
mystream(这个mystream就是我们在nginx.conf中application live后面的名字,你可以随意修改,但要保持一致)。 - 点击“推流”按钮,OBS 就会将你的桌面或摄像头画面推送到 Nginx 服务器。
拉流 (播放)
推流成功后,服务器会生成可播放的地址,你可以在任何支持这些协议的播放器或网页中观看。
-
HLS 播放地址 (推荐用于网页):
http://192.168.1.100:8080/hls/mystream.m3u8- 网页播放: 你可以使用
video.js或hls.js这样的库在网页中播放这个地址。 - VLC 播放: 在 VLC 的“媒体” -> “打开网络串流”中,粘贴此地址。
- 网页播放: 你可以使用
-
HTTP-FLV 播放地址 (低延迟):
http://192.168.1.100:8080/live?app=live&stream=mystream- 网页播放: 可以使用
flv.js库在网页中播放。 - VLC 播放: 同样在“打开网络串流”中粘贴此地址。
- 网页播放: 可以使用
-
RTMP 播放地址 (低延迟,但需要特定播放器):
rtmp://192.168.1.100:1935/live/mystream
