5分钟极速部署SRS流媒体服务器:Docker与防火墙联动手册

当直播带货成为新零售标配,当在线教育渗透每个家庭,流媒体服务器的部署效率直接决定业务上线速度。传统编译安装动辄半小时的等待,在快节奏的互联网时代显得格格不入。本文将演示如何用Docker在CentOS 7上闪电部署SRS流媒体服务器,并解决80%用户会遇到的防火墙端口配置难题。

1. 环境准备:最小化CentOS 7配置

在开始前,请确保您的CentOS 7系统已进行基础优化:

# 更新系统并安装必要工具
yum update -y && yum install -y yum-utils device-mapper-persistent-data lvm2

推荐配置

  • 2核CPU及以上
  • 4GB内存(推流场景建议8GB)
  • 带宽≥10Mbps(高清推流需50Mbps+)

生产环境建议关闭SELinux: setenforce 0 ,并修改 /etc/selinux/config SELINUX=disabled

2. Docker化部署SRS全流程

2.1 一键安装Docker引擎

# 添加Docker官方仓库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装社区版
yum install -y docker-ce docker-ce-cli containerd.io
# 启动并设置开机自启
systemctl start docker && systemctl enable docker

验证安装:

docker --version
# 输出应类似:Docker version 20.10.17, build 100c701

2.2 单命令启动SRS容器

使用阿里云镜像仓库的官方镜像:

docker run -d --name srs \
  -p 1935:1935 -p 1985:1985 -p 8080:8080 \
  -v /opt/srs/conf:/usr/local/srs/conf \
  registry.cn-hangzhou.aliyuncs.com/ossrs/srs:4 \
  ./objs/srs -c conf/srs.conf

端口作用说明

端口 协议 用途
1935 RTMP 推流/拉流主端口
8080 HTTP HLS/HTTP-FLV播放端口
1985 HTTP API管理端口

2.3 验证服务状态

# 查看容器日志
docker logs -f srs

# 进入容器检查进程
docker exec -it srs bash
ps aux | grep srs

正常输出应包含:

SRS server started

3. 防火墙配置深度解析

3.1 firewalld基础操作

# 查看默认区域
firewall-cmd --get-default-zone
# 开放端口(永久生效)
firewall-cmd --permanent --add-port=1935/tcp
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --permanent --add-port=1985/tcp
# 重载配置
firewall-cmd --reload

3.2 端口测试技巧

使用 nc 命令验证端口可达性:

# 服务器自测
yum install -y nc
nc -zv localhost 1935

# 客户端测试(替换SERVER_IP)
nc -zv SERVER_IP 1935

常见问题排查:

  • 如果本地通但外网不通,检查云服务商安全组规则
  • 出现 No route to host 需检查网络链路

4. 推拉流实战案例

4.1 OBS推流配置

参数设置

  • 服务器URL: rtmp://your_server_ip/live
  • 流密钥:自定义字符串(如 test123

高级设置建议

  • 视频码率:2000-6000Kbps(根据网络调整)
  • 关键帧间隔:2秒
  • 编码预设:veryfast

4.2 Python自动化推流

import cv2
import subprocess

rtmp_url = "rtmp://your_server_ip/live/stream_key"

cap = cv2.VideoCapture(0)  # 摄像头设备号

# 推流参数(硬编推荐)
command = [
    'ffmpeg',
    '-y', '-an',
    '-f', 'rawvideo',
    '-vcodec','rawvideo',
    '-pix_fmt', 'bgr24',
    '-s', '1280x720',  # 分辨率
    '-r', '30',        # 帧率
    '-i', '-',
    '-c:v', 'libx264',
    '-preset', 'fast',
    '-f', 'flv',
    rtmp_url
]

process = subprocess.Popen(command, stdin=subprocess.PIPE)

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
    process.stdin.write(frame.tostring())

4.3 多终端播放方案

播放地址格式

  • RTMP原生: rtmp://server_ip/live/stream_key
  • HTTP-FLV: http://server_ip:8080/live/stream_key.flv
  • HLS: http://server_ip:8080/live/stream_key.m3u8

播放器推荐

  • VLC:全协议支持
  • ffplay: ffplay http://server_ip:8080/live/stream_key.flv
  • 网页播放器:flv.js/hls.js

5. 性能优化与监控

5.1 容器资源限制

docker update srs \
  --cpus 2 \
  --memory 4g \
  --memory-swap 4g

5.2 日志分析命令

# 查看实时带宽
docker exec srs ./objs/srs -c conf/srs.conf 2>&1 | grep "ingest"

# 统计客户端连接数
netstat -anp | grep 1935 | wc -l

5.3 高可用方案

多节点部署架构

  1. 边缘节点推流到中心SRS
  2. 中心节点转推到CDN
  3. 使用Nginx做负载均衡
rtmp {
    server {
        listen 1935;
        application live {
            live on;
            push rtmp://center_node/live/$name;
        }
    }
}

更多推荐