把小米摄像头接进微服

wans

发布于8天前
🌟积攒算力仓🧩中💗

把小米摄像头接进微服

https://appstore.lazycat.cloud/#/shop/detail/cloud.lazycat.app.go2rtc

家里几台小米摄像头,平时只能用米家 App 一台一台点开看;想在微服(NAS)上把几路画面并排看,同时把其中一路交给 motionEye 录像、或者让局域网里的监控中心 / 录像机直接拉 RTSP。go2rtc 干的就是这件事:它把摄像头的流拉进来,转成浏览器能直接播放的格式,同时再以 RTSP 重播出去。它不录像、不转码(除非你要求),装好之后是一个空列表——因为它本身不带摄像头。
特别说明:懒猫摄像头本身支持rtsp,所以不需要这款应用,可以直接使用支持rtsp接入摄像头应用,如果家里有其他厂商摄像头,可以参考这篇攻略接入

开始之前

  1. 微服上装好 go2rtc,从桌面打开应用入口(域名形如 go2rtc.<你的域名>)。
  2. 小米账号和密码,且摄像头已经在米家 App 里绑在这台账号下。
  3. 摄像头和微服在同一个局域网。
  4. 用 Chrome 或 Edge 打开,MSE 播放依赖浏览器的媒体能力。

go2rtc 的界面是英文的(上游没有多语言),下面按界面上的英文按钮名说明,按钮位置和文字对照着图看即可。

第一步:把小米账号加进 go2rtc

打开应用,顶部是 Streams 列表,此时是空的,这是正常状态。点左上角的 Add:

点左上角 Add 开始添加源

会列出一堆支持的源类型(ALSA、ONVIF、Tuya、Ring、Xiaomi……),往下找到 Xiaomi 点进去:

源类型列表里选 Xiaomi

在 username / password 里填小米账号和密码,点 login:

填小米账号密码

接下来是两道验证码:先输图里的图形验证码点 send,再等手机上(或邮箱里)收到 6 位验证码,填进 verify 那一行点 send:

图形验证码与验证码回填

验证通过后点 load devices,这台账号下绑定的设备就全列出来了:

load devices 后的设备列表,url 列就是每路流的取流地址

这一步最关键:表里 url 列是每台设备的取流地址(xiaomi://...?did=...&model=...),它只在这次会话里显示,页面一刷新、一点别的页签就没了。有几个摄像头就整列复制几行,先贴到自己的文档或记事本里存好,后面配置全靠它。

第二步:把地址写进配置

点顶部导航的 config。第一次进来编辑器可能是空白的一行,刷新一下页面或者多等几秒即可,编辑器脚本是从外部 CDN 加载的:

config 页刚打开时的空编辑器

然后按下面的层级把上一步存下来的地址写进去:

streams:
  camera1:
    - xiaomi://把第 5 步存下来的整串粘在这里
  camera2:
    - xiaomi://另一台设备的整串
  camera3:
    - xiaomi://第三台设备的整串

写的时候注意这几条规则,写错一条整段配置就解析失败:

  • camera1 / camera2 是你给这路流起的名字,随你改(建议英文或拼音、不要空格),后面所有地址都用这个名字引用它;
  • 名字下面那一行必须以 - (短横线加空格)开头,表示「这是该流的一个源」;
  • 缩进用两个空格:streams: 顶格,camera1: 缩两格,- xiaomi:// 再缩两格。用 Tab 会直接报错;
  • xiaomi:// 后面一整串照抄,包括 ?did=...&model=...——did 和 model 是这台设备的,不能这台机器的地址配另一台的名字。

写完点 Save & Restart 保存并重启 go2rtc,几秒钟就恢复。

配置写好后保存重启

第三步:验证流能播

回到左上角的 go2rtc 页,刚才起名字的几路流已经在列表里了:

流列表,online 列是当前取流客户端数

点某一行右边的 stream(或者直接点流名)开始拉流,弹窗里会让你选播放方式:

  • MSE:延迟最低、最流畅,优先用这个;
  • MJPEG:兼容性最好,MSE 播不出来时换它;
  • HLS:前面两个都不行时的兜底,延迟更大。

online 列的数字是当前有多少客户端正在取这路流,显示 0 只说明现在没人看,不代表源配错了——点一次 stream,数字会变成 1。

第四步:把这路流转给别的应用 / 监控中心

画面在应用里能播之后,就可以对外供流了,分两种用法:

给同一台微服上的应用取流(motionEye 录像、Frigate 侦测、Home Assistant 接入都用这套地址):

http://go2rtc.cloud.lazycat.app.go2rtc.lzcapp:1984/api/stream.m3u8?src=camera1
http://go2rtc.cloud.lazycat.app.go2rtc.lzcapp:1984/api/stream.mjpeg?src=camera1
http://go2rtc.cloud.lazycat.app.go2rtc.lzcapp:1984/api/frame.jpeg?src=camera1

第一条是 HLS、第二条是 MJPEG、第三条是单帧快照(当封面或做侦测抓图很省资源)。src= 后面填你在配置里起的流名。

局域网里的录像机 / 监控中心 / NVR 要拉 RTSP:go2rtc 自己开了一个 RTSP 重播口 8554,但微服对局域网只开放 HTTPS 那一个入口,8554 得先用「端口转发」应用导出去,下一步专门讲。

第五步:用端口转发工具把 8554 导到局域网

https://appstore.lazycat.cloud/#/shop/detail/cloud.lazycat.app.forward

微服的应用入口只有 HTTPS 一条路,容器里的 TCP 端口局域网直连是连不上的。要拉 RTSP 就得先在「懒猫端口转发工具」里建一条规则,把 8554 暴露到微服所在的局域网(应用商店搜「端口转发」,入口子域名是 forward.<你的域名>):

  1. 打开端口转发工具,点右下角的 创建转发规则。
  2. 出口配置(局域网侧):入口地址类型选 微服物理网卡——工具下面的说明写着「仅微服所在局域网可访问」,正是要的效果;监听端口填 8554。
  3. 目标配置:转发目标类型选 微服应用 → 应用选 go2rtc → 服务选它的那个服务 → 目标端口填 8554;可以先点 测试目标连接 确认通。
  4. 点 创建规则,列表里这条规则变成启用、没有异常提示就说明监听起来了。

之后局域网里的录像机 / 监控中心 / NVR 就能用这个地址拉流:

rtsp://user:pwd@192.168.31.44:8554/camera1
  • 192.168.31.44 换成你自己微服的局域网 IP;
  • camera1 是你在 config 里起的流名,一条流一个地址;
  • user:pwd 是下一节要配的 RTSP 账号密码,没配之前这个端口谁都能拉。

第六步:给 RTSP 端口上锁

默认配置里 rtsp.listen :8554 但没有认证。回到 config 页,在 streams: 前面加上账号密码段(顺序无所谓,但都要顶格):

api:
  username: "user"
  password: "换成你的密码"
rtsp:
  username: "user"
  password: "换成你的密码"
webrtc:
  username: "user"
  password: "换成你的密码"

streams:
  camera1:
    - xiaomi://...

加上 api / rtsp / webrtc 的账号密码

保存重启后,RTSP 地址就要带上 user:pwd@,浏览器访问 1984 端口也会要求登录;应用入口本身还有微服账号体系挡着,这两层是分开的。密码改完记得把录像机 / 监控中心里存的地址一起改掉,否则它们会一直认证失败。

评论

0

暂无评论

说点什么呢~
收藏
0
0
0