1. 为什么选择Docker部署SRS流媒体服务器
在Windows平台上直接部署SRS流媒体服务器会遇到不少麻烦。SRS原本是为Linux环境设计的开源流媒体服务器,虽然理论上可以通过Cygwin等工具在Windows上运行,但实际会遇到各种兼容性问题。我刚开始尝试时,就遇到了编译失败、依赖缺失等问题,折腾了半天也没能成功运行。
这时候Docker就成了最佳解决方案。Docker通过在Windows上创建一个轻量级的Linux容器环境,完美避开了原生Windows的兼容性问题。实测下来,使用Docker部署SRS不仅成功率大大提高,还能保持与Linux原生环境完全一致的功能特性。另外,Docker的容器化部署还有以下优势:
- 环境隔离:SRS运行在独立的容器中,不会污染主机环境
- 快速部署:无需手动安装各种依赖,直接使用官方镜像
- 版本管理:可以方便地切换不同版本的SRS
- 资源控制:可以限制容器使用的CPU、内存等资源
2. 环境准备:Windows上的Docker运行环境
2.1 启用Hyper-V虚拟化
Docker Desktop for Windows依赖于Hyper-V虚拟化技术。在安装Docker之前,我们需要先确保Hyper-V已经启用。这里有个坑需要注意:启用Hyper-V后,VMware等第三方虚拟机软件可能无法正常工作。如果你同时需要使用其他虚拟机软件,可能需要考虑其他方案。
启用Hyper-V的具体步骤:
- 右键点击开始菜单,选择"应用和功能"
- 在右侧找到"程序和功能"
- 点击"启用或关闭Windows功能"
- 勾选"Hyper-V"选项
- 点击确定并重启电脑
也可以通过PowerShell快速启用:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All2.2 安装Docker Desktop
- 访问Docker官网下载Windows版本安装包
- 双击安装包,按照向导完成安装
- 安装完成后,Docker会自动启动
- 在命令行输入
docker version验证安装是否成功
安装完成后建议进行以下配置:
- 在Docker Desktop设置中调整资源分配(建议至少4GB内存)
- 配置镜像加速器提升国内下载速度
- 启用WSL 2后端以获得更好的性能
3. 获取并运行SRS Docker镜像
3.1 拉取SRS官方镜像
SRS官方提供了维护良好的Docker镜像,我们可以直接使用:
docker pull registry.cn-hangzhou.aliyuncs.com/ossrs/srs:5这个镜像是阿里云镜像仓库的国内加速版本,下载速度会比Docker Hub快很多。如果需要使用最新开发版,可以使用:dev标签。
3.2 运行SRS容器
下面是启动SRS容器的完整命令:
docker run -d --name srs \ -p 1935:1935 \ -p 1985:1985 \ -p 8080:8080 \ -p 8085:8085 \ -p 8000:8000/udp \ registry.cn-hangzhou.aliyuncs.com/ossrs/srs:5 \ ./objs/srs -c conf/docker.conf这个命令做了以下几件事:
-d:让容器在后台运行--name srs:给容器命名为srs-p参数映射了SRS需要的所有端口:- 1935:RTMP协议端口
- 1985:HTTP API端口
- 8080:HTTP服务端口
- 8085:HLS/HTTP-FLV端口
- 8000:WebRTC使用的UDP端口
3.3 验证容器运行状态
运行以下命令检查容器状态:
docker ps -a如果看到srs容器状态为"Up",说明运行成功。也可以通过日志查看运行情况:
docker logs srs4. 配置与使用SRS服务器
4.1 基本配置调整
SRS的配置文件位于容器内的/usr/local/srs/conf/docker.conf。如果需要修改配置,可以通过以下步骤:
- 将配置文件复制到本地:
docker cp srs:/usr/local/srs/conf/docker.conf ./srs.conf- 修改本地配置文件
- 将修改后的配置文件复制回容器:
docker cp ./srs.conf srs:/usr/local/srs/conf/docker.conf- 重启容器使配置生效:
docker restart srs4.2 测试推流与播放
RTMP推流测试
使用FFmpeg进行推流测试:
ffmpeg -re -i test.mp4 -c copy -f flv rtmp://localhost/live/stream其中test.mp4是你本地的视频文件。
HTTP-FLV播放测试
可以使用VLC播放器打开以下地址:
http://localhost:8080/live/stream.flv或者使用SRS自带的Web播放器:
http://localhost:8080/players/srs_player.htmlHLS播放测试
HLS流地址为:
http://localhost:8080/live/stream.m3u85. 常见问题与解决方案
5.1 端口冲突问题
如果启动容器时遇到端口冲突错误,可以修改-p参数中的主机端口号。例如:
-p 11935:1935这样就将主机的11935端口映射到容器的1935端口。
5.2 容器启动失败
如果容器启动后立即退出,可以通过查看日志定位问题:
docker logs srs常见原因包括:
- 配置文件语法错误
- 端口被占用
- 权限问题
5.3 性能调优建议
对于高并发场景,建议进行以下优化:
- 调整Docker容器的资源限制
- 修改SRS配置中的worker进程数
- 启用TCP_NODELAY减少延迟
- 根据网络状况调整GOP大小
6. 进阶使用技巧
6.1 使用Docker Compose管理服务
对于更复杂的部署场景,建议使用Docker Compose。创建一个docker-compose.yml文件:
version: '3' services: srs: image: registry.cn-hangzhou.aliyuncs.com/ossrs/srs:5 container_name: srs ports: - "1935:1935" - "1985:1985" - "8080:8080" - "8085:8085" - "8000:8000/udp" volumes: - ./srs_conf:/usr/local/srs/conf command: ["./objs/srs", "-c", "conf/docker.conf"] restart: unless-stopped然后运行:
docker-compose up -d6.2 持久化数据存储
如果需要持久化存储录像文件等数据,可以通过-v参数挂载卷:
-v /path/on/host:/usr/local/srs/objs/record6.3 监控与日志收集
可以通过以下命令查看实时日志:
docker logs -f srs也可以将日志导出到文件:
docker logs srs > srs.log对于生产环境,建议配置ELK等日志收集系统。