背景痛点

传统RTMP服务器搭建往往需要手动编译Nginx with RTMP模块、配置复杂的防火墙规则,还要处理依赖库冲突问题。对于需要快速迭代的开发者而言,这种方式的维护成本极高。1Panel通过容器化部署和可视化操作,将原本需要2-3天的工作压缩到30分钟内完成。

RTMP架构示意图

技术选型

当前主流的RTMP方案主要有三种:

  • SRS:性能优异但配置复杂,适合超大规模场景
  • Nginx-RTMP:生态完善但需要自行编译模块
  • 1Panel+Docker:开箱即用,自带健康检查和自动重启

我们选择1Panel的核心原因是其内置的应用商店直接提供Nginx-RTMP的Docker镜像,且支持:

  1. 一键版本回滚
  2. 实时带宽监控
  3. 日志自动轮转

核心实现

环境准备

  1. 在1Panel控制台左侧菜单选择「应用商店」
  2. 搜索「nginx-rtmp」并点击安装
  3. 设置容器名称和端口映射(默认1935)

关键配置

修改生成的docker-compose.yml,增加GOP间隔和关键帧设置:

services:
  nginx-rtmp:
    image: tiangolo/nginx-rtmp
    ports:
      - "1935:1935"  # RTMP默认端口
      - "80:80"      # 用于HLS拉流
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    environment:
      - GOP_LENGTH=2   # 关键帧间隔(秒)
      - FPS=30         # 帧率上限

Docker容器管理界面

进阶配置

Nginx负载均衡

对于高并发场景,需要在1Panel的Nginx管理界面添加:

upstream rtmp_servers {
    server 172.17.0.1:1935 weight=5;
    server 172.18.0.1:1935 backup;
}

FFmpeg测试命令

使用硬件加速推流测试(需要NVIDIA显卡):

ffmpeg -re -i input.mp4 -c:v h264_nvenc -preset fast \
       -f flv rtmp://your_server/live/stream_key

生产环境考量

并发优化

  1. 在docker-compose中添加资源限制:
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 2G
  2. 调整Nginx的worker_processes为CPU核心数

鉴权实现

在nginx.conf中添加:

application live {
    live on;
    deny play all;  # 禁止匿名拉流
    on_publish http://auth_server/verify;
}

避坑指南

常见问题排查:

  1. 端口冲突:使用netstat -tulnp | grep 1935检查
  2. 编码格式:确保推流使用H.264+AAC组合
  3. 时间戳异常:在FFmpeg添加-use_wallclock_as_timestamps 1

延伸思考

要实现多CDN边缘节点分发,可以考虑:

  1. 使用DNS轮询指向不同区域的服务器
  2. 在1Panel中配置多个Nginx反向代理
  3. 结合SRS的Origin-Cluster模式实现级联推流

整个搭建过程最惊喜的是1Panel的实时监控功能,可以直观看到每个流的比特率和在线人数。对于需要快速上线直播业务的团队,这绝对是性价比最高的方案。

Logo

音视频技术社区,一个全球开发者共同探讨、分享、学习音视频技术的平台,加入我们,与全球开发者一起创造更加优秀的音视频产品!

更多推荐