RTMP (Real-Time Messaging Protocol) 服务器主要用于将音视频流推送到服务器,然后分发给多个观众(拉流),在 Windows 上,最常用、最稳定且功能强大的开源 RTMP 服务器是 Nginx with the RTMP module。

下面我将为你提供一份详细的指南,包括:
- 为什么选择 Nginx-RTMP?
- 完整的环境搭建步骤(图文并茂)。
- 核心配置文件详解。
- 如何使用 OBS 推流和 VLC 拉流进行测试。
- 其他 Windows 平台的 RTMP 服务器选项。
- 常见问题与进阶功能。
为什么选择 Nginx-RTMP?
- 开源免费:完全免费,没有任何功能限制。
- 高性能:Nginx 本身就是久经考验的高性能 Web 服务器和反向代理,其模块化设计使得 RTMP 处理非常高效。
- 稳定可靠:在全球范围内被大量网站和直播平台广泛使用,非常稳定。
- 功能丰富:除了基本的 RTMP 推拉流,还支持 HLS (HTTP Live Streaming)、转码、录制、截图、DVR (数字视频录像) 等高级功能。
- 跨平台:虽然我们这里讲 Windows,但它的配置和逻辑在 Linux 上也是通用的。
完整的环境搭建步骤 (以 Windows 为例)
第一步:下载所需软件
你需要下载两个核心文件:
-
Nginx for Windows: 官方不提供 Windows 版本,但社区有编译好的稳定版本。
- 下载地址: nginx.org/en/download.html (下载
nginx/Windows-x.xx.x版本,nginx-1.25.3) - 或者使用预编译了 RTMP 模块的版本 (推荐): 为了方便,可以直接下载已经集成了 RTMP 模块的版本。
- 推荐下载地址 (包含 RTMP 模块): https://github.com/illuspas/nginx-rtmp-win32 (进入
Releases页面下载最新的nginx-rtmp-zip包)
- 下载地址: nginx.org/en/download.html (下载
-
Nginx RTMP Module 源码 (如果你需要自己编译): 如果你从官方 Nginx 网站下载,你需要这个模块。
(图片来源网络,侵删)- 下载地址: https://github.com/arut/nginx-rtmp-module
- 注意: 如果你下载了上面推荐的预编译版本,这一步可以跳过。
第二步:安装和配置
-
解压 Nginx
- 将下载到的
nginx-xxx.zip文件解压到一个你喜欢的目录,D:\nginx,为了方便,路径中最好不要包含中文和空格。
- 将下载到的
-
配置 RTMP
- 进入 Nginx 的解压目录,找到
conf文件夹。 - 用记事本或 VS Code 等文本编辑器打开
nginx.conf文件。 - 在文件的最末尾,你会看到一个
rtmp { ... }的配置块(如果预编译版本没有,你需要自己添加),这个是 RTMP 的核心配置区域。
一个基础的
nginx.conf示例:#user nobody; worker_processes 1; events { worker_connections 1024; } # --- RTMP 配置开始 --- rtmp { server { listen 1935; # RTMP 服务默认监听端口 1935 chunk_size 4096; # 定义一个名为 "live" 的应用 application live { live on; # 启用直播模式 record off; # 关闭录制,不保存视频文件 # 推流认证 (可选) # on_publish http://localhost:8080/auth; # 推流时请求此URL进行认证 } # 定义一个名为 "hls" 的应用,用于 HLS 直播 application hls { live on; hls on; # 启用 HLS hls_path D:/nginx/hls; # HLS 片片存储路径 hls_fragment 3s; # 每个HLS片段的时长 hls_playlist_length 60s; # 播放列表的总时长 } } } # --- RTMP 配置结束 --- # --- HTTP 配置开始 (用于提供 HLS 播放列表和页面) --- http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; # 指向 HLS 片片存储路径,以便通过 HTTP 访问 location /hls { # 跨域设置,如果前端页面和服务器域名不同,需要配置 add_header 'Access-Control-Allow-Origin' '*' always; types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } alias D:/nginx/hls; # 与 hls_path 保持一致 expires -1; add_header Cache-Control no-cache; } # 一个简单的测试页面 location / { root html; index index.html index.htm; } } } # --- HTTP 配置结束 --- - 进入 Nginx 的解压目录,找到
-
创建 HLS 存储目录
(图片来源网络,侵删)- 根据上面的配置,我们需要在
D:\nginx目录下创建一个名为hls的文件夹,这个文件夹将用于存放 HLS 切片后的.ts文件和.m3u8播放列表文件。 mkdir D:\nginx\hls
- 根据上面的配置,我们需要在
第三步:启动 Nginx 服务器
-
打开命令提示符 或 PowerShell。
-
进入 Nginx 的根目录 (
D:\nginx)。 -
执行以下命令启动 Nginx:
start nginx.exe
nginx.exe: 启动服务。nginx.exe -s stop: 快速停止。nginx.exe -s quit: 优雅地停止(等待连接处理完再退出)。nginx.exe -s reload: 重新加载配置文件(无需重启,非常方便)。
-
检查是否成功:
- 打开任务管理器,在 "详细信息" 或 "进程" 标签页下,你应该能看到
nginx.exe进程。 - 打开浏览器,访问
http://localhost,如果看到 "Welcome to nginx!" 页面,说明 Nginx 的 HTTP 服务正常。 - 检查 RTMP 端口是否开放:可以使用
telnet 127.0.0.1 1935命令,如果连接成功(或立即断开),说明 RTMP 服务也在监听。
- 打开任务管理器,在 "详细信息" 或 "进程" 标签页下,你应该能看到
核心配置文件详解
rtmp { ... }: 整个 RTMP 服务的配置容器。server { ... }: 定义一个 RTMP 服务器实例。listen 1935;: 指定服务器监听的端口号,RTMP 默认是 1935,请确保此端口未被其他程序占用,并且防火墙允许入站连接。application <name> { ... }: 定义一个“应用”,类似于直播平台上的“房间”或“频道”,推流时,URL 中的路径部分就是应用名。live on;: 开启实时直播模式。record off;: 不录制推流内容,设为record on;并配置record_path可将流保存为文件。hls on;: 在application中启用 HLS 功能,HLS 可以让 iOS、Safari 以及不支持 RTMP 的浏览器播放直播流。hls_path D:/nginx/hls;: HLS 片片和播放列表的存储路径。location /hls { ... }: 这是 Nginx 的 HTTP 模块配置,它将/hls这个 URL 路径请求映射到本地的D:/nginx/hls文件夹,这样我们就可以通过 HTTP 协议来访问 HLS 的播放列表和视频切片了。
如何测试:推流与拉流
推流 (使用 OBS Studio)
- 下载并安装 OBS Studio: https://obsproject.com/
- 设置 OBS:
- 打开 OBS,进入 “文件” -> “设置”。
- 在 “推流” 选项卡中:
- 服务选择 “自定义”。
- 服务器填入:
rtmp://localhost/live(这里的live就是你nginx.conf中application的名字)。 - 串流密钥填入:
my_stream_key(这个是你自定义的密钥,可以随便写,用于区分不同的推流源)。
- 在 “输出” 选项卡中,可以根据需要调整视频比特率等参数。
- 开始推流: 点击 OBS 主界面的 “开始推流” 按钮,OBS 就会将你的桌面或摄像头画面推送到 Nginx 服务器上了。
拉流 (使用 VLC Media Player)
- 下载并安装 VLC: https://www.videolan.org/vlc/
- 打开 VLC 的串流功能:
- 打开 VLC,点击 “媒体” -> “打开串流网络” (快捷键
Ctrl+N)。
- 打开 VLC,点击 “媒体” -> “打开串流网络” (快捷键
- 输入网络 URL:
- 在 “请输入网络地址” 中,输入:
rtmp://localhost/live/my_stream_key。 rtmp://是协议。localhost是服务器地址。/live是应用名。/my_stream_key是你在 OBS 中设置的串流密钥。
- 在 “请输入网络地址” 中,输入:
- 播放: 点击 “播放” 按钮,如果一切配置正确,VLC 应该能成功播放你通过 OBS 推送的视频画面。
HLS 拉流测试 (在浏览器中播放)
- 等待 HLS 文件生成: 推流开始后,等待几秒钟,Nginx 会在
D:\nginx\hls目录下生成一个my_stream_key.m3u8文件和若干个.ts片段文件。 - 访问播放列表: 在浏览器中访问
http://localhost/hls/my_stream_key.m3u8。 - 播放: 大多数现代浏览器(如 Chrome, Firefox, Edge)可以直接播放
.m3u8链接,你也可以将此 URL 复制到 VLC 中播放(VLC -> 媒体 -> 打开文件 -> 勾选“输入/编码器” -> 选择“网络” -> 粘贴 URL)。
其他 Windows 平台的 RTMP 服务器选项
-
Ant Media Server:
- 特点: 专门为流媒体设计的 Java 应用,功能非常强大,对 WebRTC (低延迟直播) 支持非常好,有友好的 Web 管理界面。
- 优点: 开源版功能已足够强大,易于部署和管理,适合需要 WebRTC 或更复杂流媒体处理场景的用户。
- 缺点: 相比 Nginx-RTMP,资源占用稍高,配置方式不同。
-
Wowza Streaming Engine:
- 特点: 商业流媒体服务器,功能极其强大和完善,是行业标准之一。
- 优点: 稳定性极高,文档齐全,支持各种协议和复杂的业务逻辑。
- 缺点: 非常昂贵,不适合个人或小型项目。
-
SRS (Simple RTMP Server):
- 特点: 国人开发的开源 RTMP 服务器,以高性能和简洁著称。
- 优点: 性能优异,特别适合大并发场景,有详细的文档和社区支持。
- 缺点: 主要以 Linux 部署为主,Windows 版本支持不如 Nginx 成熟。
对于大多数在 Windows 上搭建 RTMP 服务器的用户来说,Nginx-RTMP 是最佳选择,它免费、高效、灵活且社区支持强大。
常见问题与进阶功能
- 防火墙问题: 如果外部设备无法连接,请确保 Windows 防火墙已入站规则允许 1935 (RTMP) 和 80 (HTTP) 端口。
- 端口被占用: 如果启动 Nginx 提示端口 80 或 1935 被占用,可以修改
nginx.conf中的listen指令,换一个端口号,listen 8080;和listen 1936;。 - 转码: Nginx-RTMP 本身不直接转码,但可以与
ffmpeg结合使用,通过exec指令可以在推流或拉流时调用ffmpeg进行转码、转封装等操作,这是一个非常强大的功能,可以实现多码率自适应直播。 - DVR (数字视频录像): 将
record on;和record_path D:/nginx/dvr;添加到application配置中,即可将直播流保存为.flv或.mp4文件。 - 动态拉流: 通过
exec_push指令,可以将收到的流主动推送到其他 CDN 或 RTMP 服务器,实现中继或分发。
希望这份详细的指南能帮助你在 Windows 上成功搭建自己的 RTMP 服务器!
