在windows下快速搭建go2rtc流媒体平台

首先编写一个完整的 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.yamlstreams 下继续添加即可:

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 的界面中:

  1. 点击右上角的 "Add stream" 按钮
  2. 输入流名称和 RTSP 地址
  3. 点击保存即可立即播放

这样添加的流是临时的(容器重启后会丢失),如果需要永久保存,还是在 go2rtc.yaml 中配置更可靠。


总结

  1. 创建文件 :在 D:\go2rtc 下创建 docker-compose.ymlconfig\go2rtc.yaml
  2. 启动服务 :执行 docker-compose up -d
  3. 访问界面 :浏览器打开 http://localhost:1984 即可管理和观看视频流

这套方案在 Windows 下运行稳定,配置灵活,你可以根据实际需求随时调整配置文件。

相关推荐
小强19883 小时前
useEffect 完整使用指南:依赖数组、闭包陷阱、清理函数实战
后端
大白804 小时前
为什么不要滥用 useMemo 和 useCallback?过度优化反而更卡
后端
神奇小汤圆4 小时前
Codex 子 Agent 配置指南:让 Sol 当军师,Luna 当搬砖工
后端
ClouGence4 小时前
2026 年 4 款数据库管理工具推荐:免费、开源、付费怎么选?
数据库·后端·开源
大勇前进5 小时前
React 中 State 为什么不能直接修改?很多新手一直没懂
后端
大黄评测5 小时前
useState 与 useReducer 该怎么选?别只会无脑用 useState
后端
乐橙开放平台5 小时前
物业 SaaS 笔记:子账号 Policy 按通道隔离,At_ 管控面 / St_ 数据面治理 accessToken
后端·物联网·音视频
站大爷IP5 小时前
Python的is和==把我坑惨了,原来对象比较的水这么深
后端
fatcoder5 小时前
玩转Nginx 04 — 反向代理:给 nginx 接上后端
前端·后端·nginx