首先编写一个完整的 docker-compose.yml 文件,专门针对 Windows 下的 Docker 环境进行优化。
1. 创建项目目录结构
首先,在 Windows 上创建一个项目文件夹,比如 D:\go2rtc,然后在里面创建以下文件结构:
text
arduino
D:\go2rtc\
├── docker-compose.yml
└── config\
└── go2rtc.yaml
2. docker-compose.yml 文件
在 D:\go2rtc\docker-compose.yml 中写入以下内容:
yaml
yaml
version: '3.8'
services:
go2rtc:
image: alexxit/go2rtc:latest
container_name: go2rtc
restart: unless-stopped
# Windows 下推荐使用 host 网络模式,简化 WebRTC 的 NAT 穿透
network_mode: host
volumes:
# 将配置文件挂载到容器内
- ./config:/config
# 可选:挂载日志目录,方便排查问题
- ./logs:/var/log/go2rtc
# 如果 host 网络模式在 Windows 下有问题,可以改用端口映射(取消下面注释,并注释掉 network_mode: host)
# ports:
# - "1984:1984" # Web 管理界面
# - "8555:8555" # WebRTC 信令和媒体端口 (TCP)
# - "8555:8555/udp" # WebRTC 媒体端口 (UDP)
# - "8554:8554" # RTSP 服务端口(如果需要 go2rtc 作为 RTSP 服务器)
environment:
# 设置时区,方便日志时间显示
- TZ=Asia/Shanghai
# 容器健康检查(可选)
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:1984/api/health"]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
3. go2rtc.yaml 配置文件
在 D:\go2rtc\config\go2rtc.yaml 中写入基础配置:
yaml
yaml
# go2rtc 配置文件
# 定义你的视频流
streams:
# 示例:替换为你的 RTSP 地址
camera1: rtsp://admin:password@192.168.1.100:554/stream1
# 可以添加更多摄像头
# camera2: rtsp://admin:password@192.168.1.101:554/stream2
# Web API 和 UI 配置
api:
listen: ":1984"
# 如果要开启认证,取消下面的注释
# username: "admin"
# password: "your_strong_password"
# origin: "*" # 允许跨域访问
# WebRTC 配置
webrtc:
listen: ":8555"
# 如果需要自定义 ICE 服务器(STUN/TURN),取消注释
# ice_servers:
# - stun:stun.l.google.com:19302
# - stun:stun1.l.google.com:19302
# RTSP 服务配置(go2rtc 自身作为 RTSP 服务器)
rtsp:
listen: ":8554"
# 日志级别
log:
level: info # debug, info, warn, error
# HTTP 服务配置
http:
listen: ":1984"
# 静态文件目录(界面资源)
static_dir: /app/web
4. 启动服务
在 D:\go2rtc 目录下,打开 PowerShell 或 CMD,执行以下命令:
bash
bash
# 启动服务(后台运行)
docker-compose up -d
# 查看运行状态
docker-compose ps
# 查看实时日志
docker-compose logs -f
# 停止服务
docker-compose down
# 重启服务(修改配置文件后需要重启)
docker-compose restart
5. 访问管理界面
服务启动成功后,在浏览器访问:
text
arduino
http://localhost:1984
你就能看到 go2rtc 自带的 Web 管理界面了。在这里可以:
- 查看所有配置的流:点击流名称即可观看
- 添加临时流:通过界面上的 "Add stream" 功能
- 获取播放链接:点击 "Stream links" 获取各种格式的播放地址
6. 常见问题及解决方案
6.1 Windows 下 host 网络模式不生效
如果在 Windows Docker Desktop 中 network_mode: host 工作不正常,改用端口映射模式。修改 docker-compose.yml:
yaml
makefile
services:
go2rtc:
# network_mode: host # 注释掉这一行
ports:
- "1984:1984" # Web UI
- "8555:8555" # WebRTC TCP
- "8555:8555/udp" # WebRTC UDP
- "8554:8554" # RTSP(可选)
# 其他配置保持不变
6.2 WebRTC 连接失败
如果客户端和服务器不在同一个局域网,需要配置 STUN 服务器来帮助 NAT 穿透。在 go2rtc.yaml 中添加:
yaml
yaml
webrtc:
listen: ":8555"
ice_servers:
- stun:stun.l.google.com:19302
- stun:stun1.l.google.com:19302
6.3 添加多路摄像头
在 go2rtc.yaml 的 streams 下继续添加即可:
yaml
bash
streams:
camera1: rtsp://admin:pass@192.168.1.100:554/stream1
camera2: rtsp://admin:pass@192.168.1.101:554/stream2
camera3: rtsp://admin:pass@192.168.1.102:554/stream3
7. 进阶:使用 Web UI 动态添加流
go2rtc 的 Web UI 也支持通过界面动态添加流,这样就不需要每次都修改配置文件并重启容器了。在 http://localhost:1984 的界面中:
- 点击右上角的 "Add stream" 按钮
- 输入流名称和 RTSP 地址
- 点击保存即可立即播放
这样添加的流是临时的(容器重启后会丢失),如果需要永久保存,还是在 go2rtc.yaml 中配置更可靠。
总结
- 创建文件 :在
D:\go2rtc下创建docker-compose.yml和config\go2rtc.yaml - 启动服务 :执行
docker-compose up -d - 访问界面 :浏览器打开
http://localhost:1984即可管理和观看视频流
这套方案在 Windows 下运行稳定,配置灵活,你可以根据实际需求随时调整配置文件。