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.mzph.cn/news/686544.shtml

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

相关文章

python入门:常用模块—shutil 模块

高级的 文件、文件夹、压缩包 处理模块 shutil.copyfileobj(fsrc, fdst[, length]) 将文件内容拷贝到另一个文件中 1 2 mport shutil shutil.copyfileobj(open(old), open(new, w)) shutil.copyfile(src, dst) 拷贝文件 1 shutil.copyfile(f1.log, f2.log) # 拷贝文件&…

时序预测 | Matlab实现BO-LSSVM贝叶斯算法优化最小二乘支持向量机时间序列预测

时序预测 | Matlab实现BO-LSSVM贝叶斯算法优化最小二乘支持向量机时间序列预测 目录 时序预测 | Matlab实现BO-LSSVM贝叶斯算法优化最小二乘支持向量机时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab实现BO-LSSVM贝叶斯算法优化最小二乘支持向量机时间…

函数、极限、连续——刷题(5

目录 1.题目:2.解题思路和步骤:3.总结:小结: 1.题目: 2.解题思路和步骤: 首先可能想到的是答案为0,但是不可以把 直接化简为n 这里要用到分子分母的平方差,sin^2的周期为π&#x…

计算机网络——14CDN

CDN 视频流化服务和CDN:上下文 视频流量:占据着互连网大部分的带宽 Netflix,YouTube:占据37%,16%的下行流量 挑战:规模性-如何服务~1B用户? 单个超级服务器无法提供服务(为什么&am…

函数、极限、连续——刷题(4

目录 1.题目:2.解题思路和步骤:3.总结:小结: 1.题目: 2.解题思路和步骤: 记住这个公式即可: 所以就很容易求解了: 3.总结: 记住这个公式即可: 小结&am…

祝所有的CSDN社区成员们新年快乐

文章目录 尊敬的CSDN社区成员们, 在新年的钟声即将敲响之际,我携带着满心祝福与期许,以字为舟,穿越虚拟与现实的界限,来到您的身边,向每一位热爱编程、投身技术研究、在CSDN平台上挥洒智慧和汗水的朋友们&a…

如何使用iptables或者firewalld配置Linux系统的防火墙策略

在网络安全中,防火墙是一种关键的安全设备,用于保护计算机网络免受恶意攻击和未经授权的访问。在Linux系统中,我们可以使用iptables或者firewalld来配置防火墙策略。本文将介绍如何使用这两种工具来配置Linux系统的防火墙策略,包括…

Spring Cloud Hystrix:服务容错与熔断

1. 理解服务容错与熔断 1.1 服务容错的概念和重要性 在分布式系统中,由于各种原因(例如网络延迟、服务故障等),服务之间的通信可能会出现故障或者延迟。为了提高系统的可用性和稳定性,需要实现服务容错机制&#xff…

数据结构:4_二叉树

二叉树 一.树概念及结构 1. 树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 有一个**特殊的…

17.3.1.6 自定义处理

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 模拟某款图像处理软件的处理,它只留下红色、绿色或者蓝色这样的单一颜色。 首先按照颜色划分了6个色系,分别…

基于Arduino UNO设计一个温控制系统

目录 概述 1 硬件结构 1.1 整体硬件介绍 1.2 硬件连接结构 2 软件设计 2.1 软件功能介绍 2.2 关于Arduino的一些知识点 2.2.1 定时器 2.2.2 PWM 2.3 代码实现 2.3.1 编译工具 2.3.2 详细代码 3 测试 3.1 温度数据监控 3.2 温控测试 概述 本文介绍如何使用Ardui…

Rust 语言学习杂谈 (end) (各种工作中遇到的疑难杂症)

1.在运行 “cargo build --release” 的时候,到底发生了什么? 源 (GPT4.0) : 当我们运行 cargo build --release 命令时,实际上在进行一系列复杂的步骤来编译和构建 Rust 项目的发布版本。这个过程大致可以分解为以下几个步骤:…

MCU电源控制(PWR)与低功耗

目录 一、STM32 的内核和外设电源系统管理: 二、MCU电源监控: 三、三种低功耗模式: 1、睡眠模式: 2、停止模式: 3、待机模式: 一、STM32 的内核和外设电源系统管理: ① 电池备份区域&#…

关于预训练模型的一点感悟

最近,Yann LeCun 在 WGS 上说: 目前的LLM不可能走到AGI,原因很简单,现在训练这些LLM所使用的数据量为10万亿个令牌,也就是130亿个词,如果你计算人类阅读这些数据需要多长时间,一个人每天阅读8小…

String讲解

文章目录 String类的重要性常用的方法常用的构造方法String类的比较字符串的查找转化数字转化为字符串字符串转数字 字符串替换字符串的不可变性 字符串拆分字符串截取字符串修改 StringBuilder和StringBuffer String类的重要性 在c/c的学习中我们接触到了字符串,但…

MFC提示 未在此计算机上注册ActiveX控件“{648A5600-2C6E-101B-82B6-000000000014}“完美解决

💂 个人主页:pp不会算法^ v ^ 🤟 版权: 本文由【pp不会算法v】原创、在CSDN首发、需要转载请联系博主 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 运行一个mfc老项目的时候出现了这个问题 问题原因: 少了一个文件 …

【开源图床】使用Typora+PicGo+Github+CDN搭建个人博客图床

准备工作: 首先电脑得提前完成安装如下: 1. nodejs环境(node ,npm):【安装指南】nodejs下载、安装与配置详细教程 2. Picgo:【安装指南】图床神器之Picgo下载、安装与配置详细教程 3. Typora:【安装指南】markdown神器之Typora下载、安装与无限使用详细教…

【StarryCoding P9】【模板】可撤销并查集(并查集+启发式合并+栈)

描述 给定 n n n个结点, q q q次询问,每次询问分为三类: 1 x y :可以选择将 x , y x, y x,y两个点连通,如果已经连通则不操作。2 :撤销上一次的操作(若全部撤销完了则不操作)。3 x…

Flex布局简介及微信小程序视图层View详解

目录 一、Flex布局简介 什么是flex布局? flex属性 基本语法和常用属性 Flex 布局技巧 二、视图层View View简介 微信小程序View视图层 WXML 数据绑定 列表渲染 条件渲染 模板 WXSS 样式导入 内联样式 选择器 全局样式与局部样式 WXS 示例 注意事项…

with ThreadPoolExecutor() as executor的使用举例

ThreadPoolExecutor是Python的concurrent.futures模块中的一个类,用于创建一个线程池执行器,可以并发地执行多个任务。 下面是一个使用ThreadPoolExecutor的示例: python from concurrent.futures import ThreadPoolExecutor # 定义一个需…