插件窝 干货文章 nginx怎么使用nginx-rtmp-module模块实现直播间功能

nginx怎么使用nginx-rtmp-module模块实现直播间功能

nginx rtmp live 配置 212    来源:    2025-04-23

使用nginx-rtmp-module实现直播间功能指南

nginx-rtmp-module是一个基于Nginx的RTMP/HLS/MPEG-DASH流媒体服务器模块,可以用来搭建直播平台。以下是实现直播间功能的完整方案:

1. 安装与配置

1.1 安装nginx-rtmp-module

# 下载Nginx和rtmp模块
wget http://nginx.org/download/nginx-1.xx.x.tar.gz
wget https://github.com/arut/nginx-rtmp-module/archive/refs/tags/v1.2.x.tar.gz

# 解压
tar -zxvf nginx-1.xx.x.tar.gz
tar -zxvf v1.2.x.tar.gz

# 编译安装
cd nginx-1.xx.x
./configure --add-module=../nginx-rtmp-module-1.2.x
make
sudo make install

1.2 基本配置

编辑Nginx配置文件(通常位于/usr/local/nginx/conf/nginx.conf):

rtmp {
    server {
        listen 1935;  # RTMP默认端口
        chunk_size 4096;

        application live {
            live on;
            record off;

            # HLS配置
            hls on;
            hls_path /tmp/hls;
            hls_fragment 3s;
            hls_playlist_length 60s;

            # 访问控制
            allow publish 192.168.1.0/24;  # 允许发布的IP范围
            deny publish all;

            # 推流鉴权
            on_publish http://yourdomain.com/auth;
        }

        # 可以配置多个application对应不同直播间
        application room1 {
            live on;
            # 其他配置...
        }
    }
}

http {
    server {
        listen 80;

        location /hls {
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            root /tmp;
            add_header Cache-Control no-cache;
        }

        # 状态监控页面
        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }

        location /stat.xsl {
            root /path/to/nginx-rtmp-module/;
        }
    }
}

2. 实现直播间功能

2.1 推流端配置

主播可以使用OBS、FFmpeg等工具推流:

  • OBS设置:

    • 服务器: rtmp://your-server-ip/live
    • 流密钥: stream-key (可自定义)
  • FFmpeg命令示例:

ffmpeg -re -i input.mp4 -c copy -f flv rtmp://your-server-ip/live/stream-key

2.2 拉流播放

观众可以通过以下方式观看直播:

  1. RTMP协议:

    rtmp://your-server-ip/live/stream-key
    
  2. HLS协议(适合网页播放):

    http://your-server-ip/hls/stream-key.m3u8
    

2.3 高级功能实现

2.3.1 多房间/频道支持

application live {
    live on;

    # 使用$name变量区分不同房间
    exec ffmpeg -i rtmp://localhost/live/$name
              -c:a libfdk_aac -b:a 128k -c:v libx264 -b:v 2500k -f flv -g 30 -r 30 -s 1280x720 -preset superfast -profile:v baseline rtmp://localhost/hls/$name_720
              -c:a libfdk_aac -b:a 64k -c:v libx264 -b:v 1000k -f flv -g 30 -r 30 -s 854x480 -preset superfast -profile:v baseline rtmp://localhost/hls/$name_480;
}

2.3.2 录制直播

application live {
    live on;
    record all;
    record_path /var/rec;
    record_unique on;
    record_suffix -%Y-%m-%d-%H_%M_%S.flv;
}

2.3.3 转码与多码率

application live {
    live on;

    exec ffmpeg -i rtmp://localhost/live/$name
              -c:a aac -b:a 32k -c:v libx264 -b:v 128K -f flv rtmp://localhost/live/${name}_low
              -c:a aac -b:a 64k -c:v libx264 -b:v 256k -f flv rtmp://localhost/live/${name}_mid
              -c:a aac -b:a 128k -c:v libx264 -b:v 512K -f flv rtmp://localhost/live/${name}_high;
}

3. 安全与鉴权

3.1 推流鉴权

on_publish http://yourdomain.com/auth;

然后创建一个简单的鉴权服务(例如PHP):

<?php
// 验证stream_key是否有效
$valid_keys = ["room1_key", "room2_key"];
$stream_key = $_GET['name'];

if(in_array($stream_key, $valid_keys)) {
    header("HTTP/1.1 200 OK");
    exit;
} else {
    header("HTTP/1.1 403 Forbidden");
    exit;
}
?>

3.2 播放鉴权

location /hls {
    # 添加token验证
    secure_link $arg_token,$arg_expires;
    secure_link_md5 "$secure_link_expires$uri your_secret";

    if ($secure_link = "") { return 403; }
    if ($secure_link = "0") { return 410; }

    # 其他配置...
}

4. 性能优化

  1. 启用多worker
worker_processes auto;
rtmp_auto_push on;
  1. TCP优化
rtmp {
    server {
        listen 1935 so_keepalive=on;
        # 其他配置...
    }
}
  1. 缓冲区优化
rtmp {
    server {
        buflen 5s;
        # 其他配置...
    }
}

5. 监控与管理

  1. 使用内置统计页面:
location /stat {
    rtmp_stat all;
    rtmp_stat_stylesheet stat.xsl;
}
  1. 使用第三方工具如nginx-rtmp-monitoringGrafana进行监控。

6. 常见问题解决

  1. 推流失败

    • 检查防火墙是否开放1935端口
    • 检查nginx-rtmp-module是否正确加载
    • 检查推流地址和密钥是否正确
  2. 播放卡顿

    • 调整HLS片段大小和数量
    • 检查服务器带宽是否充足
    • 考虑启用多码率适配
  3. 延迟过高

    • 减少HLS片段长度
    • 禁用播放器缓冲
    • 考虑使用低延迟配置

通过以上配置,你可以搭建一个功能完善的直播平台。根据实际需求,你可以进一步扩展功能,如添加聊天室、礼物系统等,这些通常需要通过额外的应用程序与直播流服务器配合实现。