保姆级教程:用Docker在CentOS 7上5分钟搞定SRS流媒体服务器(含防火墙配置)

发布时间:2026/6/8 16:34:48

保姆级教程:用Docker在CentOS 7上5分钟搞定SRS流媒体服务器(含防火墙配置) 5分钟极速部署SRS流媒体服务器DockerCentOS 7实战指南当你需要快速搭建一个支持直播推流的私有媒体服务器时SRSSimple RTMP Server可能是最轻量高效的选择。作为一款开源的流媒体服务器它完美支持RTMP、HLS、HTTP-FLV等协议特别适合个人开发者、小型工作室或教育场景使用。本教程将带你用Docker在CentOS 7系统上快速部署SRS并解决90%新手会遇到的关键配置问题。1. 环境准备与Docker安装在开始之前请确保你有一台运行CentOS 7的云服务器或本地虚拟机。建议选择至少1核2G配置带宽不低于5Mbps测试推流720P视频约需3Mbps。登录服务器后首先更新系统并安装必要工具yum update -y yum install -y yum-utils device-mapper-persistent-data lvm2对于尚未安装Docker的环境官方推荐的一键安装命令如下curl -fsSL https://get.docker.com | sh安装完成后启动Docker并设置开机自启systemctl start docker systemctl enable docker提示国内服务器建议配置镜像加速器可参考各云服务商提供的专属加速地址验证Docker是否正常运行docker --version # 预期输出Docker version 20.10.x, build xxxxx2. 一键部署SRS容器SRS官方维护了Docker镜像极大简化了部署流程。以下命令将创建包含所有必要端口的容器实例docker run -d --name srs-server \ -p 1935:1935 \ # RTMP协议默认端口 -p 1985:1985 \ # HTTP API端口 -p 8080:8080 \ # HTTP-FLV/HLS访问端口 registry.cn-hangzhou.aliyuncs.com/ossrs/srs:4参数说明-d后台运行容器--name指定容器名称-p端口映射主机端口:容器端口检查容器状态docker ps -a | grep srs # 应看到STATUS列为Up若需查看实时日志可执行docker logs -f srs-server3. 防火墙关键配置CentOS 7默认启用firewalld这是导致外网无法访问的常见原因。需要放行以下端口firewall-cmd --permanent --add-port1935/tcp # RTMP推拉流 firewall-cmd --permanent --add-port8080/tcp # HTTP访问 firewall-cmd --permanent --add-port1985/tcp # API管理 firewall-cmd --reload # 重载配置验证端口开放状态firewall-cmd --list-ports # 应显示1935/tcp 8080/tcp 1985/tcp注意云服务器还需在安全组规则中放行相应端口以阿里云为例登录ECS控制台进入安全组配置添加入方向规则TCP 1935/8080/19854. OBS推流实战配置现在可以使用OBS Studio进行推流测试。安装OBS后官网提供各平台版本按以下步骤配置打开OBS设置 → 推流服务类型选择自定义服务器地址填写rtmp://你的服务器IP/live流密钥可自定义如test123点击确定保存关键参数说明参数项示例值必填服务器rtmp://1.2.3.4/live是流密钥test123否视频比特率2500720P建议值建议音频比特率160建议开始推流后可通过以下地址测试播放RTMP协议rtmp://服务器IP/live/test123HTTP-FLVhttp://服务器IP:8080/live/test123.flvHLShttp://服务器IP:8080/live/test123.m3u8推荐使用VLC播放器测试各协议兼容性。5. 进阶配置与故障排查5.1 自定义配置文件挂载如需修改SRS配置可先下载默认配置文件mkdir -p /opt/srs/conf docker cp srs-server:/usr/local/srs/conf/srs.conf /opt/srs/conf/然后重新创建容器并挂载配置docker stop srs-server docker rm srs-server docker run -d --name srs-server \ -v /opt/srs/conf/srs.conf:/usr/local/srs/conf/srs.conf \ -p 1935:1935 -p 1985:1985 -p 8080:8080 \ registry.cn-hangzhou.aliyuncs.com/ossrs/srs:45.2 常见问题解决方案问题1OBS显示推流成功但无法播放检查防火墙双端配置服务器云平台安全组测试端口连通性telnet 服务器IP 1935查看SRS日志docker logs srs-server问题2播放延迟过高尝试切换为HTTP-FLV协议延迟约1-3秒调整OBS输出参数keyint2 # 关键帧间隔 presetultrafast tunezerolatency问题3多路流管理在推流地址后添加路径区分不同流rtmp://IP/live/stream1 rtmp://IP/live/stream25.3 性能监控APISRS提供内置的HTTP API用于监控curl http://localhost:1985/api/v1/streams/典型响应示例{ code: 0, server: x86_64/linux, streams: [{ id: 123, name: live/test123, clients: 2 }] }6. Python自动化推流方案对于需要编程控制的场景可使用Python结合OpenCV实现自动化推流。以下示例展示摄像头画面推送import cv2 import subprocess rtmp_url rtmp://your_server_ip/live/python_stream cap cv2.VideoCapture(0) # 摄像头设备号 # 获取视频属性 width int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) height int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) fps 25 command [ ffmpeg, -y, -an, -f, rawvideo, -vcodec,rawvideo, -pix_fmt, bgr24, -s, f{width}x{height}, -r, str(fps), -i, -, -c:v, libx264, -pix_fmt, yuv420p, -preset, ultrafast, -f, flv, rtmp_url ] process subprocess.Popen(command, stdinsubprocess.PIPE) while cap.isOpened(): ret, frame cap.read() if not ret: break # 可在此处添加帧处理逻辑 process.stdin.write(frame.tobytes()) cap.release() process.stdin.close() process.wait()关键参数调整建议-preset ultrafast最低延迟但CPU占用高-tune zerolatency进一步降低延迟-r 25帧率匹配源设备7. 安全加固建议生产环境使用时建议采取以下措施鉴权配置 修改srs.conf添加vhost __defaultVhost__ { http_remux { enabled on; mount [vhost]/[app]/[stream].flv; } auth { enabled on; publish your_secret_key; play your_secret_key; } }HTTPS支持http_server { enabled on; listen 443; ssl on; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; }访问限制firewall-cmd --add-rich-rulerule familyipv4 source address192.168.1.0/24 port port1935 protocoltcp accept实际部署中发现为每个客户生成临时推流地址能有效防止盗链。可通过API动态管理授权密钥# 生成临时token curl -X POST http://localhost:1985/api/v1/tokens \ -d typepublishstreamlive/event123expire3600

相关新闻