美文网首页工具ionic
[WebRTC]原理解析

[WebRTC]原理解析

作者: JunChow520 | 来源:发表于2017-05-07 13:02 被阅读513次

1. WebRTC?

浏览器本身不支持点对点建立信道进行通信,需通过服务器进行中转。因此浏览器之间一次通信需通过两段信道,通信效率同时受制于两段信道宽度。此种方式并不适合数据流的传输。
WebRTC使浏览器实时通信(RTC)提供JS接口,JS接口通过信令建立浏览器点对点(P2P,peer-to-peer)的信道,信道可发送任何数据并无需经过服务器。

2. WebRTC API

WebRTC提供三个API, MediaStream用于获取本地音视频流,RPCPeerConnection用于浏览器之间建立连接以传递音视频流,RTCDataChannel用于浏览器之间传递自定义数据。

MediaStream

var getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
getUserMedia.call(navigator, {video:true, audio:true}, function(localMediaStream){
  var video = document.getElementById('video');
  video.src = window.URL.createObjectURL(localMediaStream);
  video.onloadedmetadata = function(e){
    console.log(localMediaStream.label);
    console.log(localMediaStream.getAudioTracks());
    console.log(localMediaStream.getVideoTreacks());
  }
}, function(err){
  console.log('rejected', err);
});

RTCPeerConnection

WebRTC实用RTCPeerConnection在浏览器之间传递流数据,此流数据通道是P2P的,无需服务器中转。但并不意味着能抛弃服务器,仍需服务器为传递信令(signaling)来建立信道。WebRTC没有定义用于建立信道的信令协议,信令并不是RTCPeerConnection API的一部分。

信令(signaling)

既然没有定义信令的协议,可选择任意方式(AJAX、WebSocket)任意协议(SIP、XMPP)来传递信令,建立信道。
需要信令来交换信息分为:

  • SESSION信息用来初始化信道还是错误信息
  • 网络配置,例如IP地址和端口等
  • 媒体适配, 发送方和接收方的浏览能接收什么样的编码器和分辨率

通过服务器建立信道

WebRTC提供浏览器之间P2P信道进行数据传输,但建立这个信道必须有服务器的参与。WebRTC需服务器提供:

  • 用户发现以及通信
  • 信令传输
  • NAT/防火墙穿越
  • 若P2P通信建立失败可作为中转服务器

NAT/防火墙穿越技术

在处于使用NAT设备的私有TCP/IP网络中的主机之间建立连接时需使用NAT穿越。NAT的行为是非标准化的,穿越技术大多使用公共服务器,使全球任何地方都能访问得到IP地址,在RTCPeerConnection中实用ICE框架来保证RTCPeerConnection实现NAT穿越。

ICE

ICE(Interactive Connectivity Establishment, 综合性NAT穿越技术)框架整合各种NAT穿越技术如STUN、TURN(Traversal Using Relay NAT,中继NAT实现的穿透),ICE先使用STUN尝试建立一个基于UDP的连接,失败后实用TCP(先尝试HTTP然后尝试HTTPS),若依然失败,ICE就会使用中继的TURN服务器。

RTCDataChannel

既然能建立P2P信道来传递实时音视频数据流,为什么不能使用此信道传递其他数据呢?RTCDataChannel API可实现浏览器之间传递任意数据。DataChannel是建立在PeerConnection之上的,不能单独使用。

3. WebRTC原理

WebRTC的实现是建立浏览器之间的直接连接而无需服务器中转,即P2P。因此要求彼此知道对方外网地址,而计算机大多位于NAT之后,少数主机拥有外网地址。这就要求一种方式可穿透NAT技术(STUN、TRUN)。
WebRTC实用默认STUN服务器获取当前主机的外网地址和端口,Chrome默认的是Google域名下的一个STUN,国内不大稳定。
P2P建立过程需依赖服务端中转(信令服务器),需实用双工通讯方式的WebSocket来实现信令的中转。

网络信息交换

浏览器A创建一个RTCPeerConnection对象,RTCPeerConnection自动向STUN服务器获取自己的外网IP与端口,然后将自己的网络信息经过信令服务器中转后发送给浏览器B。
浏览器B接收到A的网络信息后创建一个RTCPeerConnection对象,将接收的信息通过addIceCandidate添加到对象中。

音视频设备信息交换

浏览器A通过RTCPeerConnection对象的createOffer()获取本地音视频编码分辨率等信息,通过setLocalDescription添加到RTCPeerConnection中,并将这些信息经过信令服务器中转后发送给浏览器B。浏览器B接收到浏览器A发送过来的信息后,使用RTCPeerConnection对象的setRomoteDescription()保存。

相关文章

  • [WebRTC]原理解析

    1. WebRTC? 浏览器本身不支持点对点建立信道进行通信,需通过服务器进行中转。因此浏览器之间一次通信需通过两...

  • WebRTC基于浏览器的开发

    WebRTC简介 WebRTC通信原理 WebRTC需要通过长链接查找到通信双方,然后通过 peer to pee...

  • WebRTC介绍

    1、 WebRTC是什么?2、 WebRTC能做什么?3、 常用API4、 基本原理 WebRTC是什么? Web...

  • WebRTC-ios 跨平台音视频通话

    WebRTC的基础知识和实现原理可以参考这篇文章,ios下音视频通信的实现-基于WebRTC。 上述文章里面也有介...

  • Webrtc目录解析

    截止到2018-08-07源码:├── api├── base├── rtc_base├── system_wra...

  • WebRTC RTP 解析

    RTP 报文定义 可将RTP报文分为以下几个部分: 序号名称比特位必选说明1固定报头12*8是包括标志位:V、P、...

  • WebRTC SDP 解析

    sdp(SessionDescriptionProtocol)是一种会话描述协议,属于文本协议,即WebRTC中常...

  • WebRTC RTCP 解析

    可将RCTP报文分为以下几个部分: 序号名称比特位必选说明1固定报头4*8是包括标志位:V、P、RC、PT、len...

  • WebRTC 通信原理

    问题: 在不同的网络环境(带有摄像头/麦克风多媒体设备)中,为两个浏览器实现点对点实时视频/语音通信有什么困难? ...

  • 学习资料汇总

    GeoHash核心原理解析 GeoHash算法学习讲解、解析及原理分析

网友评论

  • 谁能叫我布朗:文章可以再深入一点:讲一讲基于WebRTC的多人视频聊天

本文标题:[WebRTC]原理解析

本文链接:https://www.haomeiwen.com/subject/fleutxtx.html