凌峰创科服务平台

Nginx流媒体服务器windows

  1. nginx-rtmp-module: 用于实现 RTMPHLSDASH 等协议的直播和点播,这是最核心、最常用的模块。
  2. nginx-vod-module: 专注于 HLSDASH 的视频点播,功能非常强大,支持拖动、倍速、广告插播等高级功能,但配置相对复杂。

对于绝大多数用户,使用 nginx-rtmp-module 就足够了,本教程将重点介绍如何使用 nginx-rtmp-module 在 Windows 上搭建一个功能完善的流媒体服务器。

Nginx流媒体服务器windows-图1
(图片来源网络,侵删)

方案概览

我们将完成以下任务:

  1. 下载并安装 Nginx 和 RTMP 模块
  2. 配置 Nginx,使其支持 RTMP 直播推流和 HLS 视频点播。
  3. 启动 Nginx 服务器
  4. 测试服务器,包括使用 OBS 进行直播推流和使用 VLC 播放器进行观看。

第一步:下载并准备文件

我们需要下载两个核心组件:Nginx 的 Windows 版本和 nginx-rtmp-module

  1. 下载 Nginx for Windows

    • 访问 Nginx 官方 Windows 下载页面:http://nginx.org/en/download.html
    • 下载最新的 Mainline version (主线版本) 的 .zip 文件。nginx-1.25.3.zip
    • 将下载的 .zip 文件解压到一个固定的、无空格和中文的路径下,D:\nginx,这个路径将作为我们的 Nginx 安装目录。
  2. 下载 nginx-rtmp-module

    Nginx流媒体服务器windows-图2
    (图片来源网络,侵删)
    • 访问其 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 可执行文件,这大大简化了操作。

最简单的方法:使用预编译版本

  1. 访问 nginx-rtmp-module 的发布页面:https://github.com/arut/nginx-rtmp-module/releases
  2. 在最新的发布版本下,找到 nginx-rtmp-module-dev.zip 或类似名称的文件,这个文件包含了已经编译好并集成了该模块的 Nginx。
  3. 备份你之前解压的 D:\nginx 目录中的 nginx.exe 文件。
  4. nginx-rtmp-module-dev.zip 中的 nginx.exe 文件替换掉你 D:\nginx 目录下的 nginx.exe

你的 D:\nginx 目录下的 Nginx 已经具备了 RTMP 功能。

Nginx流媒体服务器windows-图3
(图片来源网络,侵删)

第三步:配置 Nginx

这是最核心的一步,我们需要修改 Nginx 的主配置文件 nginx.conf

  1. 用文本编辑器(如 VS Code、Notepad++ 或记事本)打开 D:\nginx\conf\nginx.conf 文件。
  2. 备份原始的 nginx.conf,以防配置错误可以恢复。
  3. 清空,然后粘贴下面的完整配置,这个配置包含了 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 文件存放目录。

  1. 在 Nginx 安装目录下(D:\nginx),进入 html 文件夹。
  2. html 文件夹内新建一个名为 hls 的文件夹。
  3. 最终路径应为:D:\nginx\html\hls

第五步:启动 Nginx 服务器

  1. 打开一个 命令提示符PowerShell 窗口。
  2. 使用 cd 命令切换到 Nginx 的安装目录:
    
    
分享:
扫描分享到社交APP
上一篇
下一篇