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

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

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


总结

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

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

相关推荐
EatFan8 小时前
Spring Boot 4 落地观察:从 yudao-cloud、matecloud、JPower 看国产脚手架的升级路线与迁移清单
java·spring boot·后端·spring cloud·微服务·后端开发·jdk 21
波力海苔夹心脆6759 小时前
C# 序列化与反序列化详解:System.Text.Json、Newtonsoft.Json、XmlSerializer 用法、特性选项与安全实践
经验分享·后端·c#·json·.net
JavaGuide10 小时前
NVIDIA 又开源了!这次给 AI Agent 加上权限管控
前端·后端
excel10 小时前
prisma 如何处理数据库竞态
前端·数据库·后端
IT_陈寒12 小时前
Java线程池这破玩意,差点让我周末加班排查到凌晨
前端·人工智能·后端
弈栈录13 小时前
Java AI 应用的异步化与高并发设计
java·后端·架构
凤山老林14 小时前
Spring Boot 集成 iText 7 实现动态 PDF 生成与电子签章:合同、报表场景实战
spring boot·后端·pdf·itext7·电子签章
孙启超14 小时前
【AI开发之Rust】第 19 课:UniFFI 导出核心能力
开发语言·后端·rust
ServBay14 小时前
基于Jev的浏览器Agent插件狂揽 21k star,3分钟教你解放双手
后端·aigc·ai编程