凌峰创科服务平台

windows rtmp服务器

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

windows rtmp服务器-图1
(图片来源网络,侵删)

下面我将为你提供一份详细的指南,包括:

  1. 为什么选择 Nginx-RTMP?
  2. 完整的环境搭建步骤(图文并茂)。
  3. 核心配置文件详解
  4. 如何使用 OBS 推流和 VLC 拉流进行测试
  5. 其他 Windows 平台的 RTMP 服务器选项
  6. 常见问题与进阶功能

为什么选择 Nginx-RTMP?

  • 开源免费:完全免费,没有任何功能限制。
  • 高性能:Nginx 本身就是久经考验的高性能 Web 服务器和反向代理,其模块化设计使得 RTMP 处理非常高效。
  • 稳定可靠:在全球范围内被大量网站和直播平台广泛使用,非常稳定。
  • 功能丰富:除了基本的 RTMP 推拉流,还支持 HLS (HTTP Live Streaming)、转码、录制、截图、DVR (数字视频录像) 等高级功能。
  • 跨平台:虽然我们这里讲 Windows,但它的配置和逻辑在 Linux 上也是通用的。

完整的环境搭建步骤 (以 Windows 为例)

第一步:下载所需软件

你需要下载两个核心文件:

  1. 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 包)
  2. Nginx RTMP Module 源码 (如果你需要自己编译): 如果你从官方 Nginx 网站下载,你需要这个模块。

    windows rtmp服务器-图2
    (图片来源网络,侵删)

第二步:安装和配置

  1. 解压 Nginx

    • 将下载到的 nginx-xxx.zip 文件解压到一个你喜欢的目录,D:\nginx,为了方便,路径中最好不要包含中文和空格。
  2. 配置 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 配置结束 ---
  3. 创建 HLS 存储目录

    windows rtmp服务器-图3
    (图片来源网络,侵删)
    • 根据上面的配置,我们需要在 D:\nginx 目录下创建一个名为 hls 的文件夹,这个文件夹将用于存放 HLS 切片后的 .ts 文件和 .m3u8 播放列表文件。
    • mkdir D:\nginx\hls

第三步:启动 Nginx 服务器

  1. 打开命令提示符 或 PowerShell。

  2. 进入 Nginx 的根目录 (D:\nginx)。

  3. 执行以下命令启动 Nginx:

    start nginx.exe
    • nginx.exe: 启动服务。
    • nginx.exe -s stop: 快速停止。
    • nginx.exe -s quit: 优雅地停止(等待连接处理完再退出)。
    • nginx.exe -s reload: 重新加载配置文件(无需重启,非常方便)。
  4. 检查是否成功

    • 打开任务管理器,在 "详细信息" 或 "进程" 标签页下,你应该能看到 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)

  1. 下载并安装 OBS Studio: https://obsproject.com/
  2. 设置 OBS:
    • 打开 OBS,进入 “文件” -> “设置”。
    • 在 “推流” 选项卡中:
      • 服务选择 “自定义”。
      • 服务器填入: rtmp://localhost/live (这里的 live 就是你 nginx.confapplication 的名字)。
      • 串流密钥填入: my_stream_key (这个是你自定义的密钥,可以随便写,用于区分不同的推流源)。
    • 在 “输出” 选项卡中,可以根据需要调整视频比特率等参数。
  3. 开始推流: 点击 OBS 主界面的 “开始推流” 按钮,OBS 就会将你的桌面或摄像头画面推送到 Nginx 服务器上了。

拉流 (使用 VLC Media Player)

  1. 下载并安装 VLC: https://www.videolan.org/vlc/
  2. 打开 VLC 的串流功能:
    • 打开 VLC,点击 “媒体” -> “打开串流网络” (快捷键 Ctrl+N)。
  3. 输入网络 URL:
    • 在 “请输入网络地址” 中,输入: rtmp://localhost/live/my_stream_key
    • rtmp:// 是协议。
    • localhost 是服务器地址。
    • /live 是应用名。
    • /my_stream_key 是你在 OBS 中设置的串流密钥。
  4. 播放: 点击 “播放” 按钮,如果一切配置正确,VLC 应该能成功播放你通过 OBS 推送的视频画面。

HLS 拉流测试 (在浏览器中播放)

  1. 等待 HLS 文件生成: 推流开始后,等待几秒钟,Nginx 会在 D:\nginx\hls 目录下生成一个 my_stream_key.m3u8 文件和若干个 .ts 片段文件。
  2. 访问播放列表: 在浏览器中访问 http://localhost/hls/my_stream_key.m3u8
  3. 播放: 大多数现代浏览器(如 Chrome, Firefox, Edge)可以直接播放 .m3u8 链接,你也可以将此 URL 复制到 VLC 中播放(VLC -> 媒体 -> 打开文件 -> 勾选“输入/编码器” -> 选择“网络” -> 粘贴 URL)。

其他 Windows 平台的 RTMP 服务器选项

  1. Ant Media Server:

    • 特点: 专门为流媒体设计的 Java 应用,功能非常强大,对 WebRTC (低延迟直播) 支持非常好,有友好的 Web 管理界面。
    • 优点: 开源版功能已足够强大,易于部署和管理,适合需要 WebRTC 或更复杂流媒体处理场景的用户。
    • 缺点: 相比 Nginx-RTMP,资源占用稍高,配置方式不同。
  2. Wowza Streaming Engine:

    • 特点: 商业流媒体服务器,功能极其强大和完善,是行业标准之一。
    • 优点: 稳定性极高,文档齐全,支持各种协议和复杂的业务逻辑。
    • 缺点: 非常昂贵,不适合个人或小型项目。
  3. 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 服务器!

分享:
扫描分享到社交APP
上一篇
下一篇