网络摄像头离线使用
文章目录
买了几个15元一个的网络摄像头,必须联网才能用.买了乡下用的,没有网络.于是花了点时间,弄了一个本地服务器,使得摄像头在无网络也能用.
摄像头来源
某宝9新二手.15元一个.清晰度差了点,只有720P
APP是在的.
但是这个摄像头必须联网才能用,因为在乡下用.乡下是没有宽带的.于是就开始试试能不能弄成离线服务器.
抓包
手机抓包
首先是有网络环境.手机抓包.得到rtsp链接.
360P
rtsp://192.168.1.25:51503/6034E17AC9C0ECF82F8F0E3C4F890698_1
720P
rtsp://192.168.1.25:51503/6034E17AC9C0ECF82F8F0E3C4F890698_0
6034E17AC9C0ECF82F8F0E3C4F890698
可能是一种基于摄像头IP或MAC拼接后MD5生成的字符.
这个字符对摄像头是固定的.也就是抓包一次即可.至于算法不必纠结.
将RTSP链接放入网络播放器中是可以播放的.大概有2~3秒延迟.
路由器抓包
摄像头开机的时候post到官方服务器.
服务器返回一个JSON
{
"ipc_datetime": "2024-12-21 19:29:47",
"msg_name": "IpcRegister",
"timezone": 8,
"cloud_url": "",
"cloud_package_index": 0,
"cloud_stream_type": 1,
"bcd_cloud": 0,
"cloud_md_always_record": true,
"bind_flag": true,
"user_key": "**************",
"pic_url": "http:\/\/mpic-cn14.*.com\/motionPic\/upload?u=151733430789814069",
"ipc_uuid": "0",
"ret": 0,
"ret_desc": "success",
"pull_url": "120.77.*.*:9515",
"verify": "*******************",
"server_reserve": "6",
"alarm_uri": "http:\/\/devicecall.*.com\/api\/DeviceAlarm\/alarmEventReport"
}
然后建立一个TCP通信
指向上面json中
"pull_url": "120.77.*.*:9515"
TCP服务器返回
{"msg_name":"IpcRegister","msg_index":3,"ret":0,"ret_desc":"success connected","ipc_id":"66310197036","ipc_datetime":"2024-12-21 18:29:48","timezone":8}
搭建测试环境
路由器设置劫持域名.劫持到我电脑.临时测试下.
电脑上我用caddy弄了一个简单的web服务器.
返回上面数据.
<?php
$json = '{
"ipc_datetime": "2024-12-21 19:29:47",
"msg_name": "IpcRegister",
"timezone": 8,
"cloud_url": "",
"cloud_package_index": 0,
"cloud_stream_type": 1,
"bcd_cloud": 0,
"cloud_md_always_record": true,
"bind_flag": true,
"user_key": "**************",,
"pic_url": "http:\\/\\/mpic-cn14.*.com\\/motionPic\\/upload?u=151733430789814069",
"ipc_uuid": "0",
"ret": 0,
"ret_desc": "success",
"pull_url": "120.77.*.*:9515",
"verify": "**************",,
"server_reserve": "6",
"alarm_uri": "http:\\/\\/devicecall.*.com\\/api\\/DeviceAlarm\\/alarmEventReport"
}';
echo $json ;
摄像头重新通电.
摄像头提示联网失败.
然后伪造一个TCP服务器
"pull_url": "120.77.*.*:9515"
指向我电脑IP10.0.0.228
"pull_url": "10.0.0.228:9515"
发现TCP服务器不需要模拟返回,只需要摄像头能建立TCP链接,摄像头就会提示联网成功.
摄像头重新通电.链接成功.
通过RTSP链接,可以连接.但是每次连接摄像头时间显示的都是2024-12-21 19:29:47开始
通过CADDY服务器日志,发现摄像头一直在注册设备,然后caddy返回上面json,时间就是2024-12-21 19:29:47
修改下上面PHP代码,调整输出为当前时间.成功显示正确时间.
离线测试
关闭路由器互联网.家里彻底断网.
打开官方APP,可以看到我WIFI图标是无网络的.APP也提示无网络.
但是APP显示设备在线.有且只有一个在线.(如果联网我这里有好几个设备)
进去查看,确实可以查看,甚至双向语音功能也正常.
路由器部署
环境
直接路由器用C语言写一个tcp服务器.
web服务器直接用php即可.因为路由器装了kod,有PHP.
路由器录像存储
摄像头都这么便宜了,我不可能买个录像机吧,于是看看有没有openwrt录像的方案.
找到几个都是docker的,但是我不喜欢用docker.
然后找到这个openwrt开源项目:
https://github.com/onchina/luci-app-nvr
原理是ffmapg转录RTSP监控视频流到文件.
我使用有些问题,我改了下.
https://github.com/onchina/luci-app-nvr/pull/2/files
预览视频
然后通过kod网页可以查看已经录制的视频.(手机也可以.)
摄像头TF卡和路由器双存储.现在可以完全脱离APP实现录制了.过两天部署到乡下.