本人是一个搞嵌入式软件开发的铲屎官,外出时经常有远程撸猫的需求,之前尝试过各种市面上的网络摄像头,但大部分摄像头画质跟手机的比起来说还是有很大的差距,并且把一个摄像头放在家里也让人没有那么安全感。
在一次冲浪过程中发现了有不少让手机充当网络摄像头的 APP ,刚好自己有一台闲置的 iPhone SE1 。试玩了一圈此类 APP , 大部分只能局域网内实时预览,比较成熟商业化的是一个台湾公司做的阿福管家,但在大陆使用延时和稳定性还是比较一般,并且免费使用的限制太多了,最终得到的画面可能还不如原来的网络摄像头。
在各种的限制下,我就尝试自己开发一个,自己没客户端开发背景,自己有过 WebRTC 底层的调试移植开发经历,略懂上层的 Javascript WebRTC 应用接口的。如果是基于客户端开发,有多个平台需要兼容,这学习成本有点高,搞不来。
于是我选中一个天生为跨平台而生的方案:Web APP
用浏览器去实现在一个 IPCamera 功能对应的技术栈如下:
最终实现效果:https://uipcat.com/
实时视频流预览:
当然,也可以用来摸鱼:
只需要扫码即刻部署:
无需注册,在主预览设备打开 https://uipcat.com/,用手机扫码即可作为摄像头节点,保存预览设备跳转到的 URL 作为访问摄像头的唯一权限。
市场上大部分的网络摄像头产品提供了对象侦测功能,但他们的实现基本是需要将图片传到厂家服务端上识别。手机主芯片的算力是远超网络摄像头芯片,所以可以在直接在手机浏览器本地拍对象侦测模型。uIPCat 在本地默认集成了 MediaPipe 的通用对象侦测模型,可以满足绝大部分识别任务,后续开加上自定义模型,部署自己训练的模型,定制识别自己关注的对象。
在对象识别的前置,加了一个画面变化侦测,如有画面变化超过了定义的阈值,才会触发识别处理。
目前开放了绝大部分参数的自定义,后面会简化这个配置。
目前默认使用本地存储,数据会被存储在本地浏览器的 IndexedDB ,它本不是完全可靠的存储方案,各浏览器有些许差异。云存储适配了 AList v3 的 API 接口,可以通过 AList 将数据间接存到各个主流的如 S3 等主流储存或云盘方案,支持的存储列表。
通过 go2rtc 开源项目接入 HomeKit 平台,该功能目前正在测试中,后续开放。
对于大部分人来说,隐私安全是一个网络摄像头的重中之重。现有市面上的网络摄像头设备,你的隐私安全大部分是基于你对品牌厂家的信任,从实现的技术角度上说,他们是有权限可以直接访问你的摄像头,更别说大部分厂家提供了云存储直接分析处理识别你图片或视频的服务。
uIPCat 基于 WebRTC 链路本身就是基于 DTLS 和 SRTP 加密标准了,重点在于保障信令的安全。uIPCat 信令采用端到端加密方案,在主预览设备本地生成密钥,加密方法 AES-GCM ,密钥附带到 URI fragment 通过二维码线下传输到摄像头节点,加密后的信令数据通过 MQTT 通道传输。
URI fragment 既上图 # 号后字段,它不会传递给服务器端。
在 Settings 可以设置选择摄像头:
![]() | 1 wensonsmith 2024-06-14 16:26:19 +08:00 666, 不错的项目啊 |
![]() | 2 shyrock 2024-06-14 16:30:48 +08:00 感兴趣。 |
![]() | 3 Ericality 2024-06-14 16:31:20 +08:00 耳目一新的感觉 马一下回家试试 |
![]() | 4 R4rvZ6agNVWr56V0 2024-06-14 16:35:13 +08:00 非常可以 |
![]() | 5 dapang1221 2024-06-14 16:37:09 +08:00 太强了,一堆旧手机有用了 |
![]() | 6 forvvvv123 2024-06-14 16:40:13 +08:00 nb 啊 |
![]() | 7 Ziuc 2024-06-14 16:41:04 +08:00 很强,学习了 |
![]() | 8 uIPC OP 感谢各位大佬支持,之前一直是自用,首次公开放出来,欢迎大家试用多提意见。 |
9 moonbeama 2024-06-14 16:50:31 +08:00 只能使用前置摄像头吗? |
![]() | 11 amber0317 2024-06-14 17:12:23 +08:00 技术很强,完成度也很高,支持一波 |
12 Yukineko 2024-06-14 17:16:06 +08:00 不错噢,之前也有想法训练个模型通过摄像头识别猫是否在喝水/吃饭 |
13 outcastveron 2024-06-14 17:16:46 +08:00 非常 nb 的项目,支持!! |
![]() | 14 jazz1988 2024-06-14 17:18:19 +08:00 厉害,非常棒 |
![]() | 15 BQsummer 2024-06-14 17:19:44 +08:00 手机长时间插电源会不会鼓包完全看人品 |
![]() | 16 cincout 2024-06-14 17:21:22 +08:00 太厉害了 |
![]() | 17 uIPC OP @Yukineko 完全可以!如果直接扔到多模态大模型里,甚至都可以不用训练专用模型,猫是否在睡觉,吃东西还是拉翔,都可以直接高识别率识别出来,配合 Home Assistant 可以做很多原来难以实现的智能家居场景联动。 |
![]() | 18 shyling 2024-06-14 17:28:34 +08:00 有点东西! |
![]() | 19 7gugu 2024-06-14 17:31:04 +08:00 有点牛逼,下班试试看 |
![]() | 20 uIPC OP @BQsummer 是的,发热是导致鼓包主要原因,我花了很多时间优化本地 CV 发热问题,现在已经好很多了。如果不开本地画面侦测,CPU 占用极低,基本只需要维持一路 MQTT 在线就好了,摄像头不工作时可以处于休眠状态。 |
21 duffercn 2024-06-14 17:38:27 +08:00 这个太酷了! |
![]() | 22 Jesmora 2024-06-14 17:48:08 +08:00 我比较笨,iOS 如何切换到后置摄像头 |
23 fenghao0108 2024-06-14 17:48:31 +08:00 这方案吊炸天啊 |
![]() | 25 povsister 2024-06-14 18:05:08 +08:00 via iPhone 厉害,抽空研究看看 |
26 yinghu183 2024-06-14 18:30:07 +08:00 via iPhone 牛逼的项目,期待接入 homeassistant 。 |
![]() | 27 PqgpNgA0wk 2024-06-14 18:30:34 +08:00 感觉这个项目已经做的挺全,还有 us 链路 |
![]() | 28 uIPC OP @PqgpNgA0wk 部署了中国区和美国区两个 MQTT 信令节点,还两个 coturn P2P 打洞和 TURN 中继节点。 |
30 XMV2e4PmK5F85h17 2024-06-14 18:47:21 +08:00 一个手机扫码后 可以看到画面了 但是没有看到 setting 在哪里 另外 怎么用另外一个手机查看呢 |
31 1044523901 2024-06-14 18:50:12 +08:00 蹲开源 |
33 XMV2e4PmK5F85h17 2024-06-14 18:52:01 +08:00 好像有点问题 另外一个手机查看的时候 看不到画面 |
![]() | 35 |
38 slowman 2024-06-14 20:04:12 +08:00 神了 |
![]() | 39 lucifer9 2024-06-14 20:32:39 +08:00 主要问题还是手机不好固定啊 尤其是要兼顾视角和充电的位置 |
40 07aPzknB16ui9Cp3 2024-06-14 20:42:38 +08:00 手机当监控最大的问题是过热,所以还是得上专门的摄像头 |
![]() | 41 chancat 2024-06-14 22:50:34 +08:00 via Android 我用阿福管家 |
![]() | 42 swordspoet 2024-06-14 23:40:04 +08:00 厉害了 |
43 Michelangelono 2024-06-15 09:37:51 +08:00 可以搞个大屏视图,就是一个界面同时显示多个监控画面 |
![]() | 44 brianinzz 2024-06-15 15:07:29 +08:00 厉害! |
![]() | 45 Admstor 2024-06-15 16:05:07 +08:00 手机扫描二维码后 打开的网页 手机也是一片黑,PC 也停留在二维码,貌似没有任何用 |
![]() | 46 gosby 2024-06-15 19:05:35 +08:00 via Android 马赛克砖块儿好像用的是 UTC 时间比实际会慢 8 个小时 |
47 stefwoo 2024-06-16 09:22:52 +08:00 via Android 长期插电怕鼓包,可以把电池改成大电容,我改过一个。 |
![]() | 48 uIPC OP @Michelangelono 嗯嗯,这个计划搞,类似虚拟 NVR 。 |
![]() | 51 uIPC OP @wuzzispacelake 如果手机充电本身不发热,其实也还好,各有各的应用场景吧,你可以当作软路由和硬路由的区别。 |
52 CharlesRey 2024-06-16 17:10:34 +08:00 或许是我这个手机太旧了,并不支持 |
53 CharlesRey 2024-06-16 17:10:54 +08:00 或许是我这个手机太旧了,并不支持 |
54 CharlesRey 2024-06-16 17:11:17 +08:00 或许是我这个手机太旧了,并不支持[]( https://p0.meituan.net/dpplatform/3a2f60d206a28538b7a54290cf4a89c07091115.jpg) |
55 stefwoo 2024-06-16 17:15:05 +08:00 via Android nokia 。哈哈哈哈。 |
![]() | 56 uIPC OP @CharlesRey 牛逼,可以装 chrome 吗?至少是浏览器支持了 WebRTC 才可以,目前主流的都支持。 |
![]() | 58 midpoint 2024-06-17 13:16:15 +08:00 很有意思,不错的想法 |
59 stonesirsir 2024-06-18 17:11:54 +08:00 @BQsummer 这个确实也算一个问题 |
![]() | 60 52lvqiang 2024-06-19 16:32:54 +08:00 非常棒,感谢分享! |
61 stefwoo 2024-06-22 15:58:30 +08:00 via Android node 可以息屏吗?目前我只要息屏,浏览器就停止工作了。 |
62 stefwoo 2024-06-22 16:16:39 +08:00 via Android |
![]() | 63 uIPC OP @stefwoo hi #62 安卓在 5.0 之后才开始支持 WebRTC ,所以 4.4 无法原生支持。 #61 绝大部分的手机在息屏时会直接把摄像头硬件级别的休眠了,所以只能尝试把屏幕亮度降到最低保持常亮。 |
65 Fred0410 2024-06-23 02:47:49 +08:00 @CharlesRey 诺基亚都出来了,6 |
![]() | 67 simo 2024-06-24 10:37:20 +08:00 这个牛啊 |
68 johnwonderful 2024-06-24 13:12:46 +08:00 这么厉害,有空试试 |
69 zyhedwards 2024-06-28 13:31:10 +08:00 @uIPC 部署 mqtt 节点需要费用吗?成本大概多少 |
![]() | 70 uIPC OP @zyhedwards 需要的,如果连接数在 1000 以下,国内的那种 99 元一年的小机就够了。 |
71 zyhedwards 2024-06-28 14:57:14 +08:00 @uIPC 感谢解答。 成功打洞获取节点数据后,后续是不是就走 P2P 了?这样看其实带宽流量成本也不是很高? |
![]() | 72 uIPC OP @zyhedwards #71 网络类型的不同,P2P 有一定的打通失败率,这时候就需要 TURN 中继,但如果能打得通,就不需要服务端有流量成本了。 |
73 opopoipipip 2024-10-09 18:36:22 +08:00 这个厉害,支持! |
![]() | 74 chancat 169 天前 via Android 今天回来看看了...emm 我的浏览器无论手机还是 pc,出于安全和隐私和防止某无良 b 网站偷跑 pcdn,必禁用 webrtc |