- nginx-rtmp-module: 用于实现 RTMP、HLS、DASH 等协议的直播和点播,这是最核心、最常用的模块。
- nginx-vod-module: 专注于 HLS 和 DASH 的视频点播,功能非常强大,支持拖动、倍速、广告插播等高级功能,但配置相对复杂。
对于绝大多数用户,使用 nginx-rtmp-module 就足够了,本教程将重点介绍如何使用 nginx-rtmp-module 在 Windows 上搭建一个功能完善的流媒体服务器。

方案概览
我们将完成以下任务:
- 下载并安装 Nginx 和 RTMP 模块。
- 配置 Nginx,使其支持 RTMP 直播推流和 HLS 视频点播。
- 启动 Nginx 服务器。
- 测试服务器,包括使用 OBS 进行直播推流和使用 VLC 播放器进行观看。
第一步:下载并准备文件
我们需要下载两个核心组件:Nginx 的 Windows 版本和 nginx-rtmp-module。
-
下载 Nginx for Windows
- 访问 Nginx 官方 Windows 下载页面:http://nginx.org/en/download.html
- 下载最新的
Mainline version(主线版本) 的.zip文件。nginx-1.25.3.zip。 - 将下载的
.zip文件解压到一个固定的、无空格和中文的路径下,D:\nginx,这个路径将作为我们的 Nginx 安装目录。
-
下载 nginx-rtmp-module
(图片来源网络,侵删)- 访问其 GitHub 仓库:https://github.com/arut/nginx-rtmp-module
- 点击绿色的
<> Code按钮,然后选择Download ZIP。 - 将下载的
nginx-rtmp-master.zip文件也解压到一个固定路径,D:\nginx-rtmp-module。
你的目录结构现在应该类似这样:
D:\
├── nginx\
│ ├── conf\
│ ├── contrib\
│ ├── docs\
│ ├── html\
│ ├── logs\
│ ├── temp\
│ └── nginx.exe
└── nginx-rtmp-module\
├── config
├── docs\
└── ... (其他文件)
第二步:编译 Nginx (关键步骤)
标准的 Nginx Windows 版本不包含 nginx-rtmp-module,所以我们需要使用 nginx-rtmp-module 提供的配置文件来重新编译 Nginx,幸运的是,作者已经为我们准备好了编译好的 Nginx 可执行文件,这大大简化了操作。
最简单的方法:使用预编译版本
- 访问
nginx-rtmp-module的发布页面:https://github.com/arut/nginx-rtmp-module/releases - 在最新的发布版本下,找到
nginx-rtmp-module-dev.zip或类似名称的文件,这个文件包含了已经编译好并集成了该模块的 Nginx。 - 备份你之前解压的
D:\nginx目录中的nginx.exe文件。 - 将
nginx-rtmp-module-dev.zip中的nginx.exe文件替换掉你D:\nginx目录下的nginx.exe。
你的 D:\nginx 目录下的 Nginx 已经具备了 RTMP 功能。

第三步:配置 Nginx
这是最核心的一步,我们需要修改 Nginx 的主配置文件 nginx.conf。
- 用文本编辑器(如 VS Code、Notepad++ 或记事本)打开
D:\nginx\conf\nginx.conf文件。 - 备份原始的
nginx.conf,以防配置错误可以恢复。 - 清空,然后粘贴下面的完整配置,这个配置包含了 RTMP 直播推流和 HLS 视频点播的常用设置。
# 定义一个流媒体服务块的端口,RTMP默认为1935
rtmp {
server {
listen 1935; # RTMP推流和拉流的端口
chunk_size 4096;
# 直播应用配置
application live {
live on; # 启用直播模式
record off; # 不录制直播流
# HLS配置,将RTMP流转换为HLS流
hls on;
hls_path D:/nginx/html/hls; # HLS视频片段和m3u8列表文件的存放目录
hls_fragment 3s; # 每个视频片段的时长
hls_playlist_length 60s; # m3u8列表文件的时长,保留最近60秒的片段
}
}
}
# HTTP服务器配置,用于提供HLS/DASH点播和Web页面
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 用于访问状态页面,可选
server {
listen 8080;
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root D:/nginx-rtmp-module/;
}
}
# HTTP服务器,用于提供HLS视频点播
server {
listen 80; # HTTP访问端口
server_name localhost;
location / {
root html; # 网站根目录,即 D:/nginx/html/
index index.html index.htm;
}
# 指向HLS视频片段的目录
location /hls {
# 将 /hls 路径的请求映射到 D:/nginx/html/hls 目录
alias D:/nginx/html/hls;
# 添加MIME类型,否则浏览器可能无法播放
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
# 允许跨域访问,这在某些情况下是必要的
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Credentials' 'true' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization' always;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
配置文件关键点解释:
rtmp { ... }: 这是 RTMP 协议的配置块。listen 1935;: RTMP 服务监听的端口,OBS 等推流软件需要连接这个端口。application live { ... }: 定义一个名为live的直播应用。live on;: 开启直播功能。hls on;: 开启 HLS 转码。hls_path D:/nginx/html/hls;: 非常重要,指定 HLS 文件存放的目录,请确保这个目录存在,Nginx 进程有读写权限。
http { ... }: 这是标准的 HTTP 服务配置,用于提供网页服务和 HLS 视频的播放。location /hls { ... }: 将所有/hls开头的请求(如http://your-ip/hls/stream.m3u8)指向 HLS 文件目录。types { ... }: 告诉浏览器如何处理.m3u8和.ts文件。add_header 'Access-Control-Allow-Origin' '*' always;: 允许任何网站通过 iframe 等方式嵌入你的视频流,解决跨域问题。
第四步:创建必要的目录
根据上面的配置,我们需要创建一个 HLS 文件存放目录。
- 在 Nginx 安装目录下(
D:\nginx),进入html文件夹。 - 在
html文件夹内新建一个名为hls的文件夹。 - 最终路径应为:
D:\nginx\html\hls。
第五步:启动 Nginx 服务器
- 打开一个 命令提示符 或 PowerShell 窗口。
- 使用
cd命令切换到 Nginx 的安装目录:
