在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 下运行稳定,配置灵活,你可以根据实际需求随时调整配置文件。

相关推荐
北岛贰2 小时前
迷茫焦虑期,我做了一个带支付带官网的 AI 聊天虚拟恋人 App
前端·人工智能·后端
IT_陈寒5 小时前
React子组件莫名其妙重渲染?你可能漏了这个Hook
前端·人工智能·后端
小兵金林6 小时前
AI 生成代码的思考与实践
后端·ai编程
码事漫谈6 小时前
DeepSeek 明天又降价(涵历史价格对比)
后端
前端精髓6 小时前
NestJS 是什么(对着 Spring Boot 一起学习)
spring boot·后端·学习
国奉6 小时前
从零设计一个 iOS 文件浏览器:Sandbox、FileManager、Document Picker 与文件架构
后端
前端兰博6 小时前
04-数据库-MySQL
后端·mysql
她的男孩6 小时前
接口加密做成框架级能力有多难?我扒了 3600 行源码:从 RSA 握手到落库密文迁移
人工智能·后端·架构
掘金挖土6 小时前
前端手摸手跑路之 AI 应用开发(二)
前端·后端
遨翔在知识的海洋里7 小时前
nest(5)-文件上传和静态资源
后端