downgoon / -MPEG2-TS-HOWTO

0 stars 0 forks source link

WebRTC 互动 #5

Open downgoon opened 6 years ago

downgoon commented 6 years ago

互动聊天:WebRTC + WebSocket

To make it easier to explain how WebSockets works together with WebRTC, we can use the following diagram:

image

  1. John calls William. His information is sent along with the request
  2. The WebSocket server asks William if he wants to answer John’s call. William receives John’s information
  3. William accepts and answers John’s call. His information is sent along with the response
  4. John receives William’s information
  5. WebRTC establish the peer to peer communication

上图非常重要的一点:连接建立的过程需要借助服务器,但是视频/语音通话就不再需要服务器了,而是浏览器对浏览器的直连。不仅降低了通话时延,提高了实时性;而且给服务器 节省了带宽,降低了企业运营成本

体验

使用WebRTC功能,开发者只需要用javascript编程,调用浏览器内置的API。现在支持WebRTC的浏览器有ChromeFirefoxOperaSafariIE暂不支持。

WebRTC则实现了浏览器在无需插件的情况下对实时视频通讯的支持。WebRTC包含有三个组件:访问用户摄像头及麦克风的getUserMedia,穿越NAT及防火墙建立视频会话的PeerConnection,以及在浏览器之间建立点对点数据通讯的DataChannels。Google的WebRTC视频聊天演示

参考资料

downgoon commented 6 years ago

NAT/防火墙穿越技术

建立点对点信道的一个常见问题,就是NAT穿越技术。在处于使用了NAT设备的私有TCP/IP网络中的主机之间需要建立连接时需要使用NAT穿越技术。以往在VoIP领域经常会遇到这个问题。目前已经有很多NAT穿越技术,但没有一项是完美的,因为NAT的行为是 非标准化 的。

这些技术中大多 使用了一个公共服务器,这个服务使用了一个从全球任何地方都能访问的IP地址。在RTCPeeConnection中,使用ICE框架来保证RTCPeerConnection能实现NAT穿越。

ICE,全名叫交互式连接建立(Interactive Connectivity Establishment),一种综合性的NAT穿越技术,它是一种框架,可以整合各种NAT穿越技术如STUN、TURN(Traversal Using Relay NAT 中继NAT实现的穿透)。

ICE会先使用STUN,尝试建立一个基于UDP的连接;如果失败了,就会去TCP(先尝试HTTP,然后尝试HTTPS);如果依旧失败ICE就会使用一个中继的TURN服务器。

var iceServers = {
    'iceServers': [{
            'url': 'stun:stun.services.mozilla.com'
        },
        {
            'url': 'stun:stun.l.google.com:19302'
        }
    ]
}

function createPeerConnection() {
    rtcPeerConnection = new RTCPeerConnection(iceServers); // NAT穿越
    rtcPeerConnection.onicecandidate = onIceCandidate;
    rtcPeerConnection.onaddstream = onAddStream;
    rtcPeerConnection.addStream(localStream);
} 
downgoon commented 6 years ago

NAT原理及其穿越

4种NAT类型

RFC3489 中将 NAT 的实现分为四大类:

其中完全最上层的完全锥形NAT的穿透性最好,而最下层的对称形NAT的安全性最高。

NAT穿越企业

行业经验

国内移动无线网络运营商在链路上一段时间内没有数据通讯后, 会淘汰NAT表中的对应项, 造成链路中断。 国内的运营商一般NAT超时的时间为5分钟,所以通常我们TCP长连接的心跳设置的时间间隔为3-5分钟。

参考资料