网络视频监控P2P解决方案:NAT穿越

NAT的穿越并非安防监控领域的技术,是目前VOIP以及即时通信等产品的基础性技术,目前来讲已经比较成熟,且有完整的技术标准RFC,同时也有众多的实现方案,包括许多已经得到广泛应用的开源项目。

简单来讲,实现NAT的穿越是可能的,成功的概率也比较高。UDP的协议进行数据传输穿透NAT的成功率比较高,接近100%,TCP则存在一些情况无法实现穿越,主要受限路由器的端口映射机制。

要实现NAT穿越,需要有穿越控制服务器部署在互联网(有固定的域名或者IP),由该服务器来协助网络摄像机和客户端来实现NAT穿越。有些服务器还能在TCP不能穿越的情况下,实现RELAY(数据中继转发)的功能,以确保二者之间能实现数据通信。

由于NAT穿越控制服务器不同于安防监控系统中的媒体转发服务器,主要进行信令交互,不转发媒体数据,在协助打通数据通道之后,对应的网络摄像机和客户端就不会再占用服务器带宽和处理能力了,因此一台穿越控制服务器可以接入数量庞大的网络摄像机和客户端。

网络摄像机和客户端之间的访问机制
通常网络摄像机都有唯一ID,并通过该ID注册到穿越控制服务器。客户端要访问对应的网络摄像机时,也需要先注册到穿越控制服务器,并提交对应 网络摄像机的ID,由穿越控制服务器查找对应的网络摄像机,并协助网络摄像机和客户端之间进行NAT穿越,最后打通一个点对点的数据传输通道。之后,二者 即可进行正常的媒体和信令交互了。
为实现更加有效的管理,服务器可对设备接入进行认证。此外,如果设备ID过长,也可以为设备建立别名,客户端访问时用设备别名作为参数,服务器来查找对应设备。

数据传输机制
网络摄像机和客户端之间的数据传递包括有媒体流,信令流等。信令流数据量较小,媒体流数据量加大,而且需要有较好的实时性。
如果媒体流和信令流分开传输,需要打通多个通道,增加了复杂性和出错可能,同时增加了服务器的负担。
前面也讲过,UDP协议能有比较好的NAT穿透性,也比较适合媒体流的传输,但可靠性较差,不宜传输信令。为减轻服务器负担(避免TCP无法穿 透需要转发),提高穿透成功率,笔者建议只打通一个UDP通道,利用该UDP通道封装媒体和信令流,在应用层加以区分,哪些是媒体流,那些是信令流。
由于UDP传输信令可靠性极差,即使是传输媒体数据,在互联网环境下肯定会出现丢包的情况,仍然会出现图像花屏或者解码出错的情况,因此必须要解决此问题。
好在此问题并非我们第一个提出,利用UDP协议进行可靠的数据传输的需求早就存在,并有了比较好的解决方案,那就是通过UDP协议在应用层实现数据的缓冲,序列化,重传,可靠性控制和拥塞控制。

如果上述三个问题都已解决,则网络视频监控的P2P方案已经基本实现,剩下的就是产品化的问题。以下笔者针对PC访问和手机访问分别给出简要的实现说明:
PC访问网络摄像机。
PC访问网络摄像机,可以先访问一个网页,传入网络摄像机的序列号。
网页加载一个控件,该控件通过NAT穿越控制服务器和该序列号对应的网络摄像机实现NAT穿透后,通过可靠的UDP传输信令和媒体数据。控件提供视频浏览,对讲,云台控制,参数查询设置等功能。

手机访问网络摄像机。
手机由于平台的不同,需要单独开发对应的客户端或者插件以实现和PC访问类似功能。但原理是一样的,都需要通过NAT穿越控制服务器和该序列号 对应的网络摄像机实现NAT穿透后,通过可靠的UDP传输信令和媒体数据。由于开源的NAT穿越库是可以移植的,在LINUX,WINCE,IOS,Android,Sbrian等都可以实现同样的NAT穿越功能。

via 《网络视频监控P2P解决方案


这是我很早之前整理的安防视频监控知识,没有维护和更新了,现在这个网站已经转型成个人博客。需要了解安防相关知识,资料的可以去我的这个安防知识专业网站:https://ipc.name
不是海市蜃楼胜似海市蜃楼 RGBW图像传感器技术

  评论