搬瓦工配置 RTMP 直播流媒体服务器完整教程

RTMP(Real-Time Messaging Protocol)是目前最常用的直播推流协议之一。通过在搬瓦工 VPS 上搭建 RTMP 服务器,你可以拥有自己的直播推流平台,实现多平台同时转推、HLS 回放、推流鉴权等功能。本文将使用 Docker 部署基于 Nginx RTMP 模块的直播流媒体服务器。

一、准备工作

1.1 系统要求

  • 操作系统:Ubuntu 20.04+(推荐 Ubuntu 22.04)。
  • 内存:至少 1GB,如需转码建议 2GB 以上。
  • 带宽:直播对带宽要求较高,1080p 推流约需 5-8 Mbps 上行。
  • Docker:需提前安装,参考 Docker 安装教程

1.2 创建目录

mkdir -p /opt/rtmp/config
mkdir -p /opt/rtmp/hls
mkdir -p /opt/rtmp/recordings

二、Nginx RTMP 配置

2.1 创建 Nginx 配置文件

cat > /opt/rtmp/config/nginx.conf <<'EOF'
worker_processes auto;
rtmp_auto_push on;

events {
    worker_connections 1024;
}

rtmp {
    server {
        listen 1935;
        chunk_size 4096;
        ping 30s;
        notify_method get;

        # 直播推流接收
        application live {
            live on;
            record off;

            # HLS 输出
            hls on;
            hls_path /tmp/hls;
            hls_fragment 3;
            hls_playlist_length 60;

            # 推流鉴权(可选)
            # on_publish http://localhost:8080/auth;
        }

        # 带录制的直播
        application record {
            live on;
            record all;
            record_path /recordings;
            record_unique on;
            record_suffix -%Y%m%d-%H%M%S.flv;

            hls on;
            hls_path /tmp/hls;
            hls_fragment 3;
        }

        # 多平台转推
        application restream {
            live on;
            record off;

            # 转推到其他平台(取消注释并填写实际地址)
            # push rtmp://live.twitch.tv/app/YOUR_STREAM_KEY;
            # push rtmp://a.rtmp.youtube.com/live2/YOUR_STREAM_KEY;
            # push rtmp://live-push.bilivideo.com/live-bvc/?streamname=YOUR_KEY;
        }
    }
}

http {
    sendfile off;
    tcp_nopush on;
    directio 512;

    server {
        listen 8080;

        # HLS 播放
        location /hls {
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            root /tmp;
            add_header Cache-Control no-cache;
            add_header Access-Control-Allow-Origin *;
        }

        # RTMP 统计页面
        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }

        location /stat.xsl {
            root /opt/nginx/conf;
        }

        # 简易播放器页面
        location / {
            root /www;
            index index.html;
        }
    }
}
EOF

2.2 Docker Compose 部署

cd /opt/rtmp
cat > docker-compose.yml <<'EOF'
version: '3.8'

services:
  rtmp:
    image: tiangolo/nginx-rtmp:latest
    container_name: rtmp-server
    restart: unless-stopped
    ports:
      - "1935:1935"
      - "8080:8080"
    volumes:
      - ./config/nginx.conf:/etc/nginx/nginx.conf
      - ./hls:/tmp/hls
      - ./recordings:/recordings
EOF

2.3 启动服务

docker compose up -d

2.4 开放防火墙端口

ufw allow 1935/tcp
ufw allow 8080/tcp
ufw reload

三、推流测试

3.1 使用 OBS 推流

在 OBS Studio 中配置推流设置:

  • 服务:自定义。
  • 服务器rtmp://你的服务器IP/live
  • 推流密钥:任意字符串,例如 mystream

点击「开始推流」即可将视频流推送到服务器。

3.2 使用 FFmpeg 推流

也可以使用 FFmpeg 从命令行推流,适合自动化场景:

# 推送本地视频文件
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://你的服务器IP/live/mystream

# 推送摄像头
ffmpeg -f v4l2 -i /dev/video0 -c:v libx264 -preset veryfast \
  -b:v 2500k -f flv rtmp://你的服务器IP/live/mystream

3.3 播放测试

推流开始后,可以通过以下方式观看:

  • RTMP 播放:使用 VLC 打开 rtmp://你的服务器IP/live/mystream
  • HLS 播放:浏览器访问 http://你的服务器IP:8080/hls/mystream.m3u8

四、多平台转推

RTMP 服务器最常见的用途之一是将一路推流同时转发到多个直播平台。编辑 Nginx 配置文件中的 restream 应用,添加转推目标:

        application restream {
            live on;
            record off;

            # Twitch
            push rtmp://live.twitch.tv/app/YOUR_TWITCH_KEY;

            # YouTube
            push rtmp://a.rtmp.youtube.com/live2/YOUR_YOUTUBE_KEY;

            # Bilibili
            push rtmp://live-push.bilivideo.com/live-bvc/?streamname=YOUR_BILI_KEY;
        }

配置完成后重启容器:

docker compose restart

推流到 rtmp://你的服务器IP/restream/mystream,即可同时在多个平台开播。

五、推流鉴权

如果不想让任何人都能往你的服务器推流,可以启用推流鉴权。一种简单的方式是检查推流密钥:

        application live {
            live on;

            # 推流时检查密钥参数
            on_publish http://localhost:8080/auth;
        }

然后添加一个简单的鉴权接口,在 Nginx http 配置中添加:

        location /auth {
            if ($arg_key != "your_secret_key") {
                return 403;
            }
            return 200;
        }

推流时使用格式 rtmp://你的服务器IP/live/mystream?key=your_secret_key

六、录制功能

使用 record 应用推流时,视频会自动保存到 /opt/rtmp/recordings 目录。可以后续通过 FFmpeg 转换为 MP4 格式:

ffmpeg -i recording.flv -c copy output.mp4

七、性能优化

  • 降低延迟:减小 hls_fragment 值(最低 1 秒),但会增加服务器负载。
  • 推流参数:推荐编码设置为 H.264、AAC,码率控制在 2500-5000 kbps。
  • 带宽规划:转推 N 个平台需要 N 倍的上行带宽。

八、维护与更新

8.1 更新镜像

cd /opt/rtmp
docker compose pull
docker compose up -d

8.2 查看推流状态

访问 http://你的服务器IP:8080/stat 可以查看当前的 RTMP 连接状态,包括推流者信息、码率和在线观众数。

总结

通过在搬瓦工 VPS 上部署 RTMP 直播服务器,你可以完全掌控自己的直播推流链路,实现多平台转推、录制回放等功能。如果你需要更完整的视频平台功能,可以参考 PeerTube 视频平台教程。对于视频后期处理需求,可以参考 FFmpeg 视频转码教程。选购搬瓦工 VPS 请参考 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的循环折扣。如遇问题,可前往 搬瓦工官网 提交工单。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。