360可视门铃双摄版恢复案例

家用的智能摄像头恢复了很多,但是可视门铃的恢复却是第一次,现代社会似乎已经全方位处于监控网络之下。360的产品很多,可视门铃只是其众多品牌中的一个,这个案例能让我们窥视到360的开发小精产品的理念。

故障存储:  64G TF卡/exfat/ 簇(块)大小256sec

故障现象:

客户使用APP查看2024-01-06的数据时发现仅有两条时长很短的视频,其它文件全部不可见。如图1,卡内剩余空间还有45.2G,客户反映并没有做过初始化之类的操作,所以初步排除格式化之类的情况。

图1:卡的剩余空间还有45.2G,排除格式化的情况

图2:使用了目前主流的exfat文件系统

故障分析:

360确实可以,采用了exfat这种比较主流的操作系统,下面来分析下文件结构,看看360的方案是否能让人眼前一亮。如图3,可以看到360采用的是扩展名为BIN的文件来存储数据,肉眼可见的特征如下:

  1. bin扩展名,此扩展名在360系中似乎代表了二进制流的自定义文件;
  2. 文件大小都是64M,且不存在碎片直接连续分配;

通过深入分析确定了以上两条,而且第2条的特征说明其符合“文件型”二进制自定义文件,即以文件为单位进行IO操作,推断其流程基本如下:

创建BIN文件-->IO是以BIN为文件为基准->当达到最大长度时切换至下一个BIN文件

具体是统一批量创建若干文件,还是一个写满再创建新BIN文件,这个就不清楚了。这种方式管理的好处是可以预先知道BIN文件的MAX值,在这个MAX值内合理分配视频流,相对来说管理是比较有效率的属于”预定义“的管理模式,稳定性也比较强。当然缺点也是有的,那就是浪费了空间,不过在这种比较小而精的采集设备上,基本上可以忽略不计(受限于CCD硬件其采集的文件不可能过大)。

这个方案个人感觉用在门铃这种小而精的设备上确实效果很好,比常见的MP4方案更稳定(MP4方案经常会出现封装出错的问题),另外使用自定义二进制文件写入效率更高,因为只需要把采集的声音和画面直接以裸流的形式写入(比如265编码直接写入,去掉了中间打包成HVC编码的环节),另外安全性也更高,因为BIN文件需要后期分离、组合才能得到真正的视频流和音频流,单独的BIN文件是无法被任何播放器解析的。

图3:360采用了BIN类开发方案,也就是二进制流的自定义文件结构

故障处理:

通过分析BIN文件得出:

  1. 由于采用双摄像头,所以IO时采集的数据是排队写入,两个通道的数据是“叠加”到一起的;
  2. 视频编码采用了265;
  3. BIN二进制流中使用比较严谨的分块方式,给出了当前数据块的时间信息;

整合以上分析结果,写了一个小程序对BIN文件中的数据块进行分离和重组,最终成功找到客户需要的共10条视频文件。这里把音频块直接剔除了,因为音频是以后期合成MP4的方式体现的,客户只要求有视频画面,所以不再对音频进行单独的处理。

图5:360可视门铃BIN文件分离/重组程序

图6:成功恢复的10条视频

图7:播放效果(已对画面做了马赛克处理)

360和小米两个厂商都是“软”实力极强大的,然后涉足了很多硬件领域,这一类厂商有极强的软件开发能力,虽然硬件是代工的,但是方案肯定是这类厂商自行设计的,无论是使用现有的MP4方案还是自定义的BIN方案,两个厂商的开发实力让人侧目。

这就是360可视门铃的恢复方法,对于各种智能摄像头、可视门铃,CHS恢复的效果可以做到取证级---确保每一帧画面都100%正常,目前已成功助力过国内各大公检法机构的取证请求,大家在遇到此类问题时,欢迎和我们联系!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/472921.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity 2D Spine 外发光实现思路

Unity 2D Spine 外发光实现思路 前言 对于3D骨骼,要做外发光可以之间通过向法线方向延申来实现。 但是对于2D骨骼,各顶点的法线没有向3D骨骼那样拥有垂直于面的特性,那我们如何做2D骨骼的外发光效果呢? 理论基础 我们要知道&a…

optee CA/TA flow

以 TEEC_InvokeCommand 为例 CA—normal world EL0 //imx-optee-client\libteec\src\tee_client_api.c TEEC_InvokeCommandioctl(session->ctx->fd, TEE_IOC_INVOKE, &buf_data)通过syscall陷入内核态driver linux driver—normal world EL1 tee_ioctl // drive…

力扣题目训练(11)

2024年2月4日力扣题目训练 2024年2月4日力扣题目训练455. 分发饼干459. 重复的子字符串463. 岛屿的周长146. LRU 缓存147. 对链表进行插入排序76. 最小覆盖子串 2024年2月4日力扣题目训练 2024年2月4日第十一天编程训练,今天主要是进行一些题训练,包括简…

VMware Workstation 17.0 虚拟机安装MS-DOS 7.1完整详细步骤图文教程

VMware Workstation 17.0 虚拟机安装MS-DOS 7.1完整详细步骤图文教程 一、配置MS-DOS虚拟机机器环境二、安装MS-DOS磁盘操作系统 一、配置MS-DOS虚拟机机器环境 1.打开VMware Workstation Pro 2.新建虚拟机 3.建议选择【典型】,之后点击【下一步】 关于【自定义…

分省年度数据集(1990-2021年)

一、数据介绍 数据名称:分省年度数据集(1990-2021年) 数据来源:国家统计局-分省年度数据 数据范围:1990-2021年,包括31个省份 指标数量 :2981个指标 数据整理:自主整理 更新时…

简单的edge浏览器插件开发记录

今天在浏览某些网页的时候,我想要屏蔽掉某些信息或者修改网页中的文本的颜色、背景等等。于是在浏览器的控制台中直接输入JavaScript操作dom完成了我想要的功能。但是每次在网页之间跳转该功能都会消失,我需要反复复制粘贴js脚本,无法实现自动…

【数据分享】2001~2020年青藏高原植被净初级生产力数据集

各位同学们好,今天和大伙儿分享的是2001~2020年青藏高原植被净初级生产力数据集。如果大家有下载处理数据等方面的问题,您可以私信或评论。 朱军涛. (2022). 青藏高原植被净初级生产力数据集(2001-2020). 国家青藏高原数据中心. …

Rust 学习笔记 - Hello world

前言 本文将讲解如何完成一个 Rust 项目的开发流程,从编写 “Hello, World!” 开始,到使用 Cargo 管理和运行项目。 编写 Hello world 开始一个新项目很简单,首先,创建一个包含 main.rs 文件的 hello_world 文件夹,…

错误处理 ssh登陆提示:server unexpectedly closed network connection

干了一天的活,因为对etc做权限操作,导致ssh不能连接,差点奔溃 记这次处理经验 因修改/etc/ssh权限导致的ssh不能连接异常解决方法 现象: $ssh XXX192.168.5.21 出现以下问题 Read from socket failed: Connectionreset by peer …

在Visual Studio中搭建Dynamo Python开发环境,效率飞一般的增长

最近在学习Dynamo中Python Script的用法,发现这个东西用起来太不友好了,不支持自动缩进,不支持自动填充和提示。用过Visual Studio做二开的都知道,在引用了Revit api以后,就可以自动填充和提示了。 本来英语就不好&am…

图像识别基础之模板匹配

principle 图像匹配 本质:图像的相似度很高(矩阵的相似度很高) code /*\brief 我的图像匹配函数,获取差方和均值最小的矩阵作为结果\param srcPicFile:用以匹配的图像文件\param templatePicFile:模板图像文件\param destPicFile:输出的检测结果文件…

一周学会Django5 Python Web开发-项目配置settings.py文件-数据库配置

锋哥原创的Python Web开发 Django5视频教程: 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计17条视频,包括:2024版 Django5 Python we…