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

2024-02-17 15:20

本文主要是介绍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%正常,目前已成功助力过国内各大公检法机构的取证请求,大家在遇到此类问题时,欢迎和我们联系!

这篇关于360可视门铃双摄版恢复案例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

六个案例搞懂mysql间隙锁

《六个案例搞懂mysql间隙锁》MySQL中的间隙是指索引中两个索引键之间的空间,间隙锁用于防止范围查询期间的幻读,本文主要介绍了六个案例搞懂mysql间隙锁,具有一定的参考价值,感兴趣的可以了解一下... 目录概念解释间隙锁详解间隙锁触发条件间隙锁加锁规则案例演示案例一:唯一索引等值锁定存在的数据案例二:

MySQL 表的内外连接案例详解

《MySQL表的内外连接案例详解》本文给大家介绍MySQL表的内外连接,结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录表的内外连接(重点)内连接外连接表的内外连接(重点)内连接内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我

Java Stream.reduce()方法操作实际案例讲解

《JavaStream.reduce()方法操作实际案例讲解》reduce是JavaStreamAPI中的一个核心操作,用于将流中的元素组合起来产生单个结果,:本文主要介绍JavaStream.... 目录一、reduce的基本概念1. 什么是reduce操作2. reduce方法的三种形式二、reduce

Spring Boot 整合 Redis 实现数据缓存案例详解

《SpringBoot整合Redis实现数据缓存案例详解》Springboot缓存,默认使用的是ConcurrentMap的方式来实现的,然而我们在项目中并不会这么使用,本文介绍SpringB... 目录1.添加 Maven 依赖2.配置Redis属性3.创建 redisCacheManager4.使用Sp

springboot项目redis缓存异常实战案例详解(提供解决方案)

《springboot项目redis缓存异常实战案例详解(提供解决方案)》redis基本上是高并发场景上会用到的一个高性能的key-value数据库,属于nosql类型,一般用作于缓存,一般是结合数据... 目录缓存异常实践案例缓存穿透问题缓存击穿问题(其中也解决了穿透问题)完整代码缓存异常实践案例Red

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

MySQL 复合查询案例详解

《MySQL复合查询案例详解》:本文主要介绍MySQL复合查询案例详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录基本查询回顾多表笛卡尔积子查询与where子查询多行子查询多列子查询子查询与from总结合并查询(不太重要)union基本查询回顾查询

Java Stream流使用案例深入详解

《JavaStream流使用案例深入详解》:本文主要介绍JavaStream流使用案例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录前言1. Lambda1.1 语法1.2 没参数只有一条语句或者多条语句1.3 一个参数只有一条语句或者多

MySQL 中的 JSON 查询案例详解

《MySQL中的JSON查询案例详解》:本文主要介绍MySQL的JSON查询的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 的 jsON 路径格式基本结构路径组件详解特殊语法元素实际示例简单路径复杂路径简写操作符注意MySQL 的 J

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模