news 2026/6/8 12:46:35

别再手动编译了!Docker一键部署SRS流媒体服务器(支持RTSP/RTMP/OBS推流)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
别再手动编译了!Docker一键部署SRS流媒体服务器(支持RTSP/RTMP/OBS推流)

容器化时代:5分钟用Docker搭建SRS流媒体服务器实战指南

流媒体技术正在重塑内容分发的格局,而SRS(Simple RTMP Server)作为轻量级开源解决方案,已经成为实时音视频传输领域的热门选择。传统部署方式需要处理复杂的依赖关系和编译过程,消耗开发者大量时间在环境配置而非核心业务上。本文将展示如何利用Docker技术,在五分钟内完成从零到直播的完整链路搭建。

1. 为什么选择Docker部署SRS?

编译安装SRS的传统方式需要处理gcc、make、automake等工具链的版本兼容问题,在CentOS和Ubuntu等不同系统上还可能遇到依赖库缺失的情况。根据实际测试,源码编译平均需要47分钟(取决于硬件配置),而Docker部署仅需:

docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080 \ registry.cn-hangzhou.aliyuncs.com/ossrs/srs:4 \ ./objs/srs -c conf/srs.conf

性能对比表

指标源码编译部署Docker部署
部署时间30-60分钟1-3分钟
磁盘占用约500MB约300MB(镜像层)
隔离性依赖系统环境完全隔离
升级难度需要重新编译替换镜像版本即可
多版本共存复杂简单(不同容器)

提示:生产环境建议使用docker-compose管理,便于持久化配置和日志

2. 完整Docker Compose解决方案

对于需要长期运行的流媒体服务,推荐使用以下docker-compose.yml配置:

version: '3' services: srs: image: registry.cn-hangzhou.aliyuncs.com/ossrs/srs:4 container_name: srs-server restart: unless-stopped ports: - "1935:1935" # RTMP - "1985:1985" # API - "8080:8080" # HTTP/FLV/HLS volumes: - ./srs.conf:/usr/local/srs/conf/srs.conf - ./logs:/usr/local/srs/objs command: ["./objs/srs", "-c", "/usr/local/srs/conf/srs.conf"]

关键配置说明:

  • 端口映射:1935用于RTMP推拉流,8080提供HTTP-FLV和HLS播放
  • 卷挂载:将配置文件和日志持久化到宿主机
  • 自定义配置:修改srs.conf可启用集群、HTTPS等高级功能

启动命令:

mkdir -p {conf,logs} && touch conf/srs.conf docker-compose up -d

3. 多协议推流实战演示

3.1 OBS专业推流配置

在OBS设置中配置:

  1. 进入"设置→推流"
  2. 服务类型选择"自定义"
  3. 服务器地址填写:rtmp://你的服务器IP/live/
  4. 流密钥任意填写(如test123

推流地址结构解析

rtmp://[服务器IP]/live/[流名称] | | | | | └── 自定义流ID(可动态生成) | └── 固定路径(不可修改) └── 支持域名或IP地址

3.2 Python实时推流方案

使用OpenCV+FFmpeg实现摄像头直播:

import cv2 import subprocess rtmp_url = "rtmp://your_server_ip/live/stream_key" 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', "{}x{}".format(width, height), '-r', str(fps), '-i', '-', '-c:v', 'libx264', '-pix_fmt', 'yuv420p', '-preset', 'ultrafast', '-f', 'flv', rtmp_url ] pipe = subprocess.Popen(command, stdin=subprocess.PIPE) while cap.isOpened(): ret, frame = cap.read() if not ret: break # 可在此处添加图像处理代码 pipe.stdin.write(frame.tostring()) cap.release() pipe.terminate()

3.3 RTSP摄像头转RTMP

对于监控设备接入,可用FFmpeg转换协议:

ffmpeg -rtsp_transport tcp \ -i "rtsp://摄像头IP/stream" \ -c copy -f flv \ rtmp://localhost/live/camera_stream

4. 多终端播放方案对比

SRS支持三种主流播放协议,适应不同终端需求:

协议类型延迟兼容性适用场景
RTMP1-3秒需要Flash/专用播放器低延迟要求场景
HTTP-FLV1-3秒支持HTML5Web端直播
HLS10-30秒全平台原生支持移动端及CDN分发

播放地址示例

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

在项目实践中,我们通常同时启用三种协议:用RTMP推流,通过HTTP-FLV实现网页端低延迟观看,HLS用于移动端自适应码率播放。这种组合既能保证推流质量,又能覆盖各类观看终端。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/8 12:46:32

NXP EdgeLock A5000开发实战:从硬件信任根到物联网安全部署

1. 项目概述与核心价值在物联网设备开发这条路上摸爬滚打了十几年,我见过太多项目在安全问题上“翻车”。早期大家可能觉得,用软件算法做个加密、在Flash里存个密钥就万事大吉了,直到产品被轻易克隆、固件被恶意替换、云端通信被中间人攻击&a…

作者头像 李华
网站建设 2026/6/8 12:46:20

ok-ww技术解析:基于图像识别的鸣潮游戏自动化框架实现

ok-ww技术解析:基于图像识别的鸣潮游戏自动化框架实现 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves ok-ww是一款专为…

作者头像 李华
网站建设 2026/6/8 12:41:15

3分钟掌握B站缓存视频转换:m4s-converter让你的离线视频重获新生

3分钟掌握B站缓存视频转换:m4s-converter让你的离线视频重获新生 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否遇到过这样的…

作者头像 李华
网站建设 2026/6/8 12:40:21

从Referer到安全策略:深入理解图片防盗链背后的HTTP头与浏览器行为

从Referer到安全策略:深入理解图片防盗链背后的HTTP头与浏览器行为 当你精心设计的网页突然出现一堆裂图,控制台里满是403错误时,问题很可能出在防盗链机制上。这种现象在中大型Web项目中尤为常见,特别是当团队需要整合第三方图床…

作者头像 李华
网站建设 2026/6/8 12:40:15

DSI3协议与FXPS7140X传感器初始化实战:从硬件设计到功能安全配置

1. 项目概述与DSI3协议核心价值在汽车电子和工业控制领域,传感器网络的可靠性与实时性是系统设计的基石。传统的传感器布线方式,每个传感器都需要独立的电源线和数据线,不仅增加了线束的复杂度和成本,也为电磁兼容(EMC…

作者头像 李华