海康萤石摄像机远程监控机制分析

背景介绍

有一个远程监控的需求,正常情况下采用服务器转发视频流对服务器要求很高,所以p2p看似是一个比较好的方案,但是p2p打洞却不是一件容易的事情,所以打算分析下海康萤石摄像机远程监控的机制,是否采用了p2p的方式。

初步分析结果

少废话,先说结果:对称型nat的p2p打洞是一个比较困难的技术问题,萤石摄像机并没有很好的解决对称型p2p打洞的问题,而是采用服务器转发的方式实现远程监控。
注:由于测试环境比较单一,不能完全确认萤石不能打通对称型nat网络。

萤石摄像机远程监控的处理流程

萤石摄像机在跨公网的远程在线预览时,首先为了保证用户体验,预览起初会采用服务器对视频流进行转发,保证用户尽快的看到视频监控画面。
同时会尝试进行p2p打洞,采用端口累加的算法尝试打洞,非常遗憾的是在进行了10次左右的测试中,p2p打洞一直没能成功,在尝试p2p打洞几分钟后,确认一直打不通后,则放弃p2p方式,后续一直采用服务器转发的模式。

测试环境:

  • ipc设备架设在A处,通过中国移动网络接入公网,接入的公网ip为:223.95.81.70。
  • 客户端架设在B处,通过中国电信网络接入公网。
  • 经检测以上两种宽带接入,都是对称型nat网络。

测试过程:

  • 通过客户端进行视频远程预览,同时进行抓包。

测试结果分析

Frame 2261: 284 bytes on wire (2272 bits), 284 bytes captured (2272 bits) on interface 0
Ethernet II, Src: IntelCor_83:03:74 (24:77:03:83:03:74), Dst: TendaTec_5a:b1:a0 (c8:3a:35:5a:b1:a0)
Internet Protocol Version 4, Src: 192.168.0.119, Dst: 223.95.81.70
User Datagram Protocol, Src Port: 10103 (10103), Dst Port: 10009 (10009)
Data (242 bytes)
Frame 3018: 284 bytes on wire (2272 bits), 284 bytes captured (2272 bits) on interface 0
Ethernet II, Src: IntelCor_83:03:74 (24:77:03:83:03:74), Dst: TendaTec_5a:b1:a0 (c8:3a:35:5a:b1:a0)
Internet Protocol Version 4, Src: 192.168.0.119, Dst: 223.95.81.70
User Datagram Protocol, Src Port: 10105 (10105), Dst Port: 10010 (10010)
Data (242 bytes)
Frame 4770: 284 bytes on wire (2272 bits), 284 bytes captured (2272 bits) on interface 0
Ethernet II, Src: IntelCor_83:03:74 (24:77:03:83:03:74), Dst: TendaTec_5a:b1:a0 (c8:3a:35:5a:b1:a0)
Internet Protocol Version 4, Src: 192.168.0.119, Dst: 223.95.81.70
User Datagram Protocol, Src Port: 10107 (10107), Dst Port: 10011 (10011)
Data (242 bytes)

从抓到的数据包可以看到客户端会向223.95.81.70地址(ipc设备所在网络的公网ip)发送长度为284字节的udp打洞包,并调整源端口和目的端口进行端口预测。
打洞持续一段时间后,没有打通,则放弃p2p,后续一直采用服务转发的方式进行远程预览。

萤石视频流的转发应该是通过私有协议,而p2p标准定义了turn协议实现音视频数据的转发,不知道为什么对于这种常见的音视频传输,在监控领域并没有一个标准的协议出现。

疑惑

对称型nat的打洞是十分困难的,虽然有不少预测算法声称可以将打洞成功率提高到90%,不过从萤石相机的表现看效果不是很好,但是不知道迅雷,bt,电驴这类软件是如何实现p2p分享下载的,感觉这方面的水还是很深的。

另外优酷之前推出的可以赚钱的路由宝,貌似原理就是将个人的路由器做成能够分享的小型服务器,这样可以利用个人宽带的资源,节省自身的带宽。不过路由宝要能够用来分享,也是需要进行些设置,通过搜索感觉也是为了穿透nat的限制。

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

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

相关文章

实体类中存在List集合,怎么在xml文件中,对应

public class AppointmentDTO {/**订单id**/private String appointmentId;/**订单里面的商品list**/private List<CommodityShowInAppoinment> list;/**订单里面的商品数量**/private Integer count;/**订单实际付款的金额**/private Float totalMoney; } 怎么弄呢&…

git管理复杂项目代码

背景 我初学前端的时候接触git&#xff0c;那时候只要会add/commit什么的就好了&#xff0c;网上的教程大多都停留在从头到尾一个个介绍git的命令&#xff0c;关于各种用法&#xff0c;特别是多个分支来回交叉冲突的实际处理&#xff0c;很少有这方面的介绍&#xff0c;经过很多…

实现一个通用的生产者消费者队列(c语言版本)

背景&#xff1a;笔者之前一直从事嵌入式音视频相关的开发工作&#xff0c;对于音视频的数据的处理&#xff0c;生产者消费者队列必不可少&#xff0c;而如何实现一个高效稳定的生产者消费者队列则十分重要&#xff0c;不过按照笔者从业的经验&#xff0c;所看到的现象&#xf…

美媒:小米新浪达成合作 采取行动对抗腾讯

来自美媒的报道称&#xff0c;两家中国最具发展潜力的科技公司&#xff0c;新浪和小米将会共同合作&#xff0c;结合各自的通信应用程序来共同对抗移动通信的挑战&#xff0c;尤其是拥有2亿用户的强劲对手微信。 来自中国的消息称&#xff0c;这次新浪与小米的合作将会涉及到新…

Linux expr命令、Linux wc命令、Linux let 命令

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 expr命令是一个手工命令行计数器&#xff0c;用于在UNIX/LINUX下求表达式变量的值&#xff0c;一般用于整数值&#xff0c;也可用于字符…

【English】六、am,is,are 分别用在什么地方

is&#xff1a;第三人称单数am&#xff1a;第一人称单数are&#xff1a;第二人称单数&#xff0c;第一、二、三人称的复数 用于第一人称, I am ......(我是.......)用于第三人称, He is ......(他是......) 或She is ......(她是......), It is ......(它是.......)用于第二人…

误删了公司数据库,但我还是活下来了

专栏 | 九章算法 网址 | www.jiuzhang.com 上周我与同事们进行了一次关于职业生涯中搞砸了一些事情的简短谈话。这确实会沦为他人笑柄&#xff0c;却更给我们带来了珍贵的教训。重要的是&#xff0c;我们应该分享那些曾经的错误&#xff0c;这样其他人就可以从其中学习。下文是…

改良程序的11技巧

有很多理由都能说明为什么我们应该写出清晰、可读性好的程序。最重要的一点&#xff0c;程序你只写一次&#xff0c;但以后会无数次的阅读。当你第二天回头来看你的代码时&#xff0c;你就要开始阅读它了。当你把代码拿给其他人看时&#xff0c;他必须阅读你的代码。因此&#…

历时四年,给Google提交的Android Framework Bug终于被Fixed了

历时四年&#xff0c;Google终于修复了一个我发现的Android Framework Bug 2014年在做一个Android终端设备开发过程中&#xff0c;发现了一个Android Framework层的Bug&#xff0c;给Google提交了issue和解决方案&#xff0c;和外界传言一致Google一般不太在意个人开发者提交的…

Linux ping命令、Linux kill命令、Linux logname命令、 Linux logout命令

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Linux ping命令用于检测主机。 执行ping指令会使用ICMP传输协议&#xff0c;发出要求回应的信息&#xff0c;若远端主机的网络功能没有…

前端布局神器display:flex

2009年&#xff0c;W3C提出了一种新的方案--Flex布局&#xff0c;可以简便、完整、响应式地实现各种页面布局。目前已得到所有现在浏览器的支持。 flex浏览器支持一、Flex布局是什么&#xff1f; Flex是Flexible Box的缩写&#xff0c;翻译成中文就是“弹性盒子”&#xff0c;用…

bind简单转发实验

2019独角兽企业重金招聘Python工程师标准>>> *主配置文件内容// [rootlocalhost /]# cat /etc/named.conf // // named.conf // // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS // server as a caching only nameserver (as a local…

数据结构:块状链表

一、概述 有时候我们需要设计这样一种数据结构&#xff1a;它能快速在要求位置插入或者删除一段数据。先考虑两种简单的数据结构&#xff1a;数组和链表。数组的优点是能够在O(1)的时间内找到所要执行操作的位置&#xff0c;但其缺点是无论是插入或删除都要移动之后的所有数据&…

记账本开发小计(四)

今天处理的是记账本小软件中的查询功能&#xff0c;由于账目的要求就是准确性&#xff0c;所以对于记账本程序来说&#xff0c;模糊查询并不适用&#xff0c;所以在这里只能是按照指定的条件来进行查询所以我做的事按照时间进行查询&#xff0c;为了方便进行处理&#xff0c;这…

Linux ps命令、Linux top命令

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Linux ps命令用于显示当前进程 (process) 的状态。 语法 ps [options] [--help][options] [--help] 参数&#xff1a; ps 的参数非常…

Prime Distance POJ - 2689 线性筛

一个数 $n$ 必有一个不超过 $\sqrt n$ 的质因子。 打表处理出 $1$ 到 $\sqrt n$ 的质因子后去筛掉属于 $L$ 到 $R$ 区间的素数即可。 Code: #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> using namespace std; const…

给定a和n,计算a+aa+aaa+a...a(n个a)的和(大数据处理)

题目描述&#xff1a;给定a和n&#xff0c;计算aaaaaaa...a(n个a)的和。 输入&#xff1a;测试数据有多组&#xff0c;输入a&#xff0c;n&#xff08;1<a<9,1<n<100&#xff09;。 输出&#xff1a;对于每组输入,请输出结果。 样例输入&#xff1a;1 10 样例输出&…

ssh和rsh的区别、Linux rsh命令

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 ssh 和 rsh的区别主要有: 1 安全级别不同, 主要是ssh的密码等都是加密传输,而且还有密钥认证的机制, rsh明文传输. 而且没有密钥的机制.…

Java并发编程(多线程)中的相关概念

众所周知&#xff0c;在Java的知识体系中&#xff0c;并发编程是非常重要的一环&#xff0c;也是面试中必问的题&#xff0c;一个好的Java程序员是必须对并发编程这块有所了解的。 并发必须知道的概念 在深入学习并发编程之前&#xff0c;我们需要了解几个基本的概念。 同步和异…

4、容器虚拟化网络概述

Docker 网络 Docker 的网络实现其实就是利用了 Linux 上的网络名称空间和虚拟网络设备&#xff08;特别是 veth pair&#xff09;。 Linux 网络命名空间&#xff1a;https://www.jianshu.com/p/369e50201bce Linux虚拟网络设备之veth&#xff1a; https://segmentfault.com/a/1…