Nginx RTMP 直播流转发配置指南、提供小红书、抖音等直播
本文档整理了在 NAS 上使用 Docker Compose 部署 Nginx RTMP 服务器,转发直播流,在小红书、抖音等平台直播 前提条件
NAS 环境: 已启用 Docker 和 Docker Compose。 开放端口:1935(RTMP)、8080(HTTP)。 建议配置:2 核 CPU,4GB 内存,10Mbps 带宽。
OBS Studio:用于推流。 直播平台:需获取 RTMP 推流地址(如 rtmp://push.example.com/live/your_stream_key)。 工具:VLC、FFplay 用于测试拉流。
配置步骤
- 配置 Docker Compose
在 NAS 的共享文件夹(如 /share/homes/nginx-rtmp)中创建
docker-compose.yml: version: '3.8' services: nginx-rtmp: image: tiangolo/nginx-rtmp:latest container_name: nginx-rtmp ports: - "1935:1935" # RTMP 端口 - "8080:80" # HTTP 端口(HLS) volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro - ./hls:/tmp/hls - ./logs:/var/log/nginx restart: unless-stopped networks: - rtmp-net networks: rtmp-net: driver: bridge
创建目录并设置权限:
mkdir -p /share/homes/nginx-rtmp/{hls,logs}
chmod -R 777 /share/homes/nginx-rtmp
- 配置 Nginx 创建 /share/homes/nginx-rtmp/nginx.conf:
worker_processes 1;
events {
worker_connections 512;
}
rtmp {
server {
listen 1935;
chunk_size 512;
ping 30s;
notify_method get;
application live {
live on;
record off;
allow publish 192.168.1.0/24; # 替换为局域网网段
allow play all;
drop_idle_publisher 10s;
# push rtmp://push.example.com/live/your_stream_key; # 替换为实际密钥,调试时可禁用
}
application hls {
live on;
hls on;
hls_path /tmp/hls;
hls_fragment 1s;
hls_playlist_length 4s;
hls_cleanup off;
hls_nested on;
}
}
}
http {
server {
listen 80;
server_name localhost;
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /tmp;
add_header Access-Control-Allow-Origin *;
add_header Cache-Control no-cache;
}
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root /usr/local/nginx/html;
}
}
}
- 启动服务
cd /share/homes/nginx-rtmp
docker-compose up -d
docker exec nginx-rtmp nginx -t
- 配置 OBS 推流
OBS 设置: 服务器:rtmp://nas-ip:1935/live 串流密钥:my_stream 编码器:NVENC(优先)或 x264 比特率:1500-2000 kbps 分辨率:1280x720,帧率:25 fps 关键帧间隔:1 秒 启用“网络优化”(设置 > 高级 > 网络)
启动推流,确认状态栏显示“已连接”。
- 测试拉流
RTMP 拉流:ffplay rtmp://nas-ip:1935/live/my_stream
或 VLC:rtmp://nas-ip:1935/live/my_stream HLS 拉流: 访问:http://nas-ip:8080/hls/my_stream/my_stream.m3u8 VLC 设置: 网络缓存:500ms(工具 > 首选项 > 输入/编解码器) 禁用硬件解码(工具 > 首选项 > 视频)
- 排查卡顿和连接失败
OBS 推流: 检查日志:帮助 > 日志文件 > 查看当前日志。 确认码率稳定,无掉帧。
Nginx 日志:
docker exec nginx-rtmp
cat /var/log/nginx/{access,error}.log
搜索 publish、play 或 hls 相关错误。 NAS 性能:
docker stats nginx-rtmp
df -h /share/homes/nginx-rtmp/hls
若 CPU 高,降低比特率(1000 kbps)。 网络: 确认端口开放:
telnet nas-ip 1935
telnet nas-ip 8080
检查路由器端口转发:1935、8080 到 NAS 内网 IP。
nslookup your-nas-domain
HLS 优化: 调整 hls_fragment(1s)、hls_playlist_length(4s)。 确保 /tmp/hls 权限:docker exec nginx-rtmp chmod -R 777 /tmp/hls
- 验证直播平台
打开直播平台客户端,确认直播间画面。 若无画面,重新获取 RTMP 地址,更新 push 指令:
push rtmp://push.example.com/live/your_stream_key;
ps: 小红书直播平台需要将两个地址拼接如
push rtmp://live-push.xhscdn.com/live/1234567890123456789?txSecret=123456789123456789123456789123456789&txTime=68A08DCV&txDelayTime=0&redExpire=1234567890&vendor=tencent;
- 调试信息 收集以下信息以进一步排查:
OBS 日志(推流状态、错误)。 Nginx 日志(access.log、error.log)。 HLS 目录内容(ls -l /share/homes/nginx-rtmp/hls/my_stream)。 VLC 日志(工具 > 消息,调试模式)。 直播平台画面状态。 NAS 型号、网络配置(IP、DDNS、端口)。
总结 通过优化 OBS 推流(低比特率、关键帧间隔)、Nginx 配置(HLS 参数、资源限制)和网络设置(端口、带宽),可解决画面卡顿和连接失败问题。HLS 拉流(http://nas-ip:8080/hls/my_stream/my_stream.m3u8)比 RTMP 更稳定,推荐优先测试。
Comments