08月09, 2025

绿联NAS部署nginx转发直播流,提供小红书、抖音等直播

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 用于测试拉流。

配置步骤

  1. 配置 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
  1. 配置 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;
        }
    }
}
  1. 启动服务
cd /share/homes/nginx-rtmp
docker-compose up -d
docker exec nginx-rtmp nginx -t
  1. 配置 OBS 推流

OBS 设置: 服务器:rtmp://nas-ip:1935/live 串流密钥:my_stream 编码器:NVENC(优先)或 x264 比特率:1500-2000 kbps 分辨率:1280x720,帧率:25 fps 关键帧间隔:1 秒 启用“网络优化”(设置 > 高级 > 网络)

启动推流,确认状态栏显示“已连接”。

  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(工具 > 首选项 > 输入/编解码器) 禁用硬件解码(工具 > 首选项 > 视频)

  1. 排查卡顿和连接失败

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

  1. 验证直播平台

打开直播平台客户端,确认直播间画面。 若无画面,重新获取 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;
  1. 调试信息 收集以下信息以进一步排查:

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 更稳定,推荐优先测试。

本文链接:https://587v5.com/post/lv-lian-NAS-bu-shu-nginx-zhuan-fa-zhi-bo-liu-,-ti-gong-xiao-hong-shu-、-dou-yin-deng-zhi-bo.html

Comments