别再手动编译了!用Docker 5分钟在CentOS 7上跑起SRS流媒体服务器(附端口避坑指南)
·
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 高可用方案
多节点部署架构 :
- 边缘节点推流到中心SRS
- 中心节点转推到CDN
- 使用Nginx做负载均衡
rtmp {
server {
listen 1935;
application live {
live on;
push rtmp://center_node/live/$name;
}
}
}
更多推荐
所有评论(0)