本项目是 ThingsPanel 物联网平台的官方官方适配器,用于无缝集成 go2rtc 这一强大的流媒体服务器。
Go2RTC 是目前最先进的开源流媒体服务器之一,支持 RTSP, RTMP, WebRTC, HTTP-FLV, HLS 等几乎所有主流协议。 通过本适配器,您可以获得:
- 📺 极低延迟: 在 ThingsPanel 仪表盘中实现毫秒级 (WebRTC/MSE) 视频监控。
- 🔄 自动同步: 自动发现 go2rtc 中的所有视频流,无需在平台手动重复创建设备。
- ⚡ 统一管理: 在 ThingsPanel 中统一管理视频设备、查看状态、接收告警,同时享受 go2rtc 强大的转码和分发能力。
这是一个 ThingsPanel 的三方接入服务插件。
- 自动同步: 自动从go2rtc获取streams列表,同步到ThingsPanel
- 三方接入: 使用服务接入模式,无需手动创建设备
- 流媒体集成: 支持 RTSP, RTMP, WebRTC, HLS 等多种协议
- 设备模拟: 支持使用 ffmpeg 模拟摄像头流,方便无实物开发测试
在运行适配器之前,您需要先安装并启动 go2rtc 流媒体服务。
请前往 go2rtc Releases 下载适合您架构的二进制文件 (如 Linux amd64)。
# 下载 (以 v1.9.8 linux_amd64 为例)
wget https://github.com/AlexxIT/go2rtc/releases/download/v1.9.8/go2rtc_linux_amd64 -O go2rtc
chmod +x go2rtc创建 /etc/go2rtc/go2rtc.yaml,填入以下基础配置:
api:
listen: "0.0.0.0:1984" # 开放 API 端口
rtsp:
listen: ":8554" # RTSP 端口
streams:
# 可选:预置一些测试流
camera_demo: exec:ffmpeg -re -stream_loop -1 -i https://media.w3.org/2010/05/sintel/trailer.mp4 -c copy -rtsp_transport tcp -f rtsp {output}# 前台启动测试
./go2rtc -c /etc/go2rtc/go2rtc.yaml
# 或后台运行
nohup ./go2rtc -c /etc/go2rtc/go2rtc.yaml > go2rtc.log 2>&1 &确保访问 http://<服务器IP>:1984 能看到 go2rtc 的 Web 界面。
确保 go2rtc 已在宿主机运行,并且 API端口为 1984。
如果你没有真实摄像头,可以使用模拟流。
我们使用 ffmpeg 生成一个测试流。你可以通过 go2rtc 的 API 添加:
# 添加一个名为 virtual_cam 的虚拟流,显示测试图案和时间
curl -X PUT "http://localhost:1984/api/streams?src=exec:ffmpeg+-re+-f+lavfi+-i+testsrc=size=1920x1080:rate=30+-c:v+libx264+-preset+ultrafast+-tune+zerolatency+-f+rtsp+{output}&name=virtual_cam"提示: 这个命令会让 go2rtc 启动 ffmpeg 进程,生成一个实时的 RTSP 流。
如果有真实摄像头,直接添加其 RTSP 地址:
curl -X PUT "http://localhost:1984/api/streams?src=rtsp://admin:password@192.168.1.100:554/stream&name=living_room"项目内置了测试脚本,可以快速添加模拟设备:
# 在服务器上执行
chmod +x tests/simulate_device.sh
./tests/simulate_device.sh执行后,go2rtc 会新增一个名为 simulated_cam_v2 的流。等待 30 秒后,ThingsPanel 应自动发现该设备,并在 属性 页签中显示 stream_url。
除了使用脚本模拟,您也可以使用 OBS Studio 进行真实的推流测试。
在开始推流前,您必须先在 go2rtc.yaml 中定义这个流名称(留空即可),否则 go2rtc 会拒绝推流。
修改 /etc/go2rtc/go2rtc.yaml:
streams:
# ... 其他流 ...
obs_demo: # 👈 必须添加这一行,表示允许接收名为 obs_demo 的推流修改后记得重启 go2rtc 服务。
- 打开 OBS -> 设置 -> 推流。
- 服务: 选择
自定义。 - 服务器:
rtmp://192.168.31.205:1935(请替换为您的实际服务器IP)。 - 推流码:
obs_demo(必须与配置文件中的名称一致)。
点击 "开始直播"。如果连接成功,OBS 底部状态栏会出现绿色的比特率提示。
等待 30 秒左右,ThingsPanel 设备列表中会自动出现一个名为 obs_demo 的新设备,且属性中包含推流地址。
在启动适配器前,需要修改 configs/config.yaml 文件。
设备自动注册需要使用 设备模板密钥。请按以下步骤获取:
- 进入 ThingsPanel 常规管理 -> 设备模板。
- 找到(或创建)
go2rtc模板,点击详情。 - 进入 设备设置 -> 自动创建设备。
- 找到 一型一密 (One-Type-One-Secret) 配置项。
- 点击复选框 "允许设备自动创建"。
- 复制显示的 "设备密码" (即 Template Secret)。
打开 configs/config.yaml (或服务器上的 ~/tp-adapter/configs/config.yaml):
# ...
platform:
# ...
# 将刚才复制的密钥填入此处
template_secret: "ff3267c2-e0f5-6615-ba15-99a50a89600f" 路径: 应用管理 → 插件管理
找到 GO2RTC 插件,点击 配置。
| 配置项 | 正确填写示例 | 错误示例 (不要这样填) |
|---|---|---|
| HTTP服务地址 | 172.17.0.1:12000 |
http://172.17.0.1:12000 |
| 服务订阅主题前缀 | service/go2rtc |
(留空) |
| 设备类型 | 直连设备 |
- |
说明: 平台会自动添加协议头,如果这里填了
http://,会导致请求变成http://http://...从而失败。
路径: 设备管理 → 三方接入
- 点击 新增接入
- 选择
GO2RTC插件 - 填写配置:
| 配置项 | 填写内容 | 说明 |
|---|---|---|
| 接入点名称 | 本地go2rtc |
任意名称 |
| go2rtc API地址 | http://localhost:1984 |
指向 go2rtc 的 API |
| 同步间隔 | 30 |
自动同步周期(秒) |
| 启用自动同步 | 开启 |
- 点击 确认
- 如果配置正确,会提示成功。
- 如果提示"插件请求失败",请检查超级管理员的HTTP服务地址配置。
接入点创建成功后,点击 设备同步 (或等待自动同步)。
- 平台会从 go2rtc 拉取所有流信息 (
virtual_cam,living_room等)。
进入 设备列表,你会看到:
- 设备名称:
virtual_cam - 设备状态: 在线 (如果 go2rtc 中流是活跃的)
进入 设备详情 → 实时视频 (需平台支持播放 go2rtc 流)。
原因: 超级管理员插件配置中的 API 地址填错了。
解决: 去掉 http:// 前缀。只填 172.17.0.1:12000。
原因: 插件返回了 null 而不是空数组 [] (已在 v1.0.1 修复)。
解决: 确保使用最新的插件版本。
原因: go2rtc 中没有任何流。 解决: 参考本文的 添加模拟流 章节添加一个测试流。
# 1. 编译 (Mac上编译Linux版)
GOOS=linux GOARCH=amd64 go build -o tp-adapter-linux cmd/main.go
# 2. 部署到服务器
./deploy.exp