搬瓦工配置 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% 的循环折扣。如遇问题,可前往 搬瓦工官网 提交工单。