WebRTC 系列文章 WebRTC基本概念理解

WebRTC 系列文章 概念说明

    • mediaDevices.getUserMedia
    • RTCPeerConnection
    • 信令服务器
    • ICE 互动式连接建立
      • STUN
      • NAT
      • TURN
    • SDP

WebRTC 系列文章 WebRTC基本概念理解_第1张图片
WebRTC 系列文章 WebRTC基本概念理解_第2张图片

WebRTC (Web Real-Time Communications)
是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和(或)音频流或者其他任意数据的传输。WebRTC包含的这些标准使用户在无需安装任何插件或者第三方的软件的情况下,创建点对点(Peer-to-Peer)的数据分享和电话会议成为可能。

WebRTC 标准文档 by W3C

MDN Web docs for WebRTC


一个典型的WebRTC应用流程:

WebRTC 系列文章 WebRTC基本概念理解_第3张图片

mediaDevices.getUserMedia

MediaDevices 接口提供访问连接媒体输入的设备,如照相机和麦克风,以及屏幕共享等

RTCPeerConnection

RTCPeerConnection 接口代表一个由本地计算机到远端的WebRTC连接。该接口提供了创建,保持,监控,关闭连接的方法的实现。

信令服务器

信令服务器的作用是帮助我们将不在同一台电脑上的用户连接起来。

一般用 web socket 实现信令服务器比较好。
WebRTC 系列文章 WebRTC基本概念理解_第4张图片

ICE 互动式连接建立

ICE是互动式连接建立的英文Interactive Connectivity Establishment的缩写。

互动式连接建立(Interactive Connectivity Establishment ——ICE)由IETF的MMUSIC工作组开发出来的,它所提供的是一种框架,使各种NAT穿透技术可以实现统一。该技术可以让基于SIP的VoIP客户端成功地穿透远程用户与网络之间可能存在的各类防火墙。

STUN

STUN(Simple Traversal of User Datagram Protocol through Network Address Translators (NATs),NAT的UDP简单穿越)是一种网络协议,它允许位于NAT(或多重NAT)后的客户 端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的Internet端端口。这些信息被用来在两个同时处于 NAT路由器之后的主机之间建立UDP通信。该协议由RFC 3489定义。目前RFC 3489协议已被RFC 5389协议所取代,新的协议中,将STUN定义为一个协助穿越NAT的工具,并不独立提供穿越的解决方案。它还有升级版本RFC 7350,目前正在完善中。

NAT

网络地址转换(NAT)用于为您的设备提供一个公共IP地址。路由器将有一个公共IP地址,每个连接到路由器的设备将有一个私有IP地址。请求将从设备的私有IP转换为具有唯一端口的路由器的公共IP。这样你就不需要为每台设备设置一个唯一的公共IP,但你仍然可以在互联网上找到它。

一些路由器将限制谁可以连接到网络上的设备。这可能意味着,即使我们有STUN服务器找到的公共IP地址,也没有人能够创建连接。在这种情况下,我们需要轮流。

TURN

TURN协议允许NAT或者防火墙后面的对象可以通过TCP或者UDP接收到数据。这在使用了对称式的NAT(或者防火墙)的网络中尤其具有实用价值 [1] 。
TURN方式解决NAT问题的思路与STUN相似,是基于私网接入用户通过某种机制预先得到其私有地址对应在公网的地址(STUN方式得到的地址为出口NAT上的地址,TURN方式得到地址为TURNServer上的地址),然后在报文负载中所描述的地址信息直接填写该公网地址的方式,实际应用原理也是一样的。
TURN的全称为Traversal Using Relay NAT,即通过Relay方式穿越NAT,TURN应用模型通过分配TURNServer的地址和端口作为客户端对外的接受地址和端口,即私网用户发出的报文都要经过TURNServer进行Relay转发,这种方式应用模型除了具有STUN方式的优点外,还解决了STUN应用无法穿透对称NAT(SymmetricNAT)以及类似的Firewall设备的缺陷,即无论企业网/驻地网出口为哪种类型的NAT/FW,都可以实现NAT的穿透,同时TURN支持基于TCP的应用,如H323协议。此外TURNServer控制分配地址和端口,能分配RTP/RTCP地址对(RTCP端口号为RTP端口号加1)作为本端客户的接受地址,避免了STUN应用模型下出口NAT对RTP/RTCP地址端口号的任意分配,使得客户端无法收到对端发过来的RTCP报文(对端发RTCP报文时,目的端口号缺省按RTP端口号加1发送)
TURN的局限性在于所有报文都必须经过TURNServer转发,增大了包的延迟和丢包的可能性。

SDP

会话描述协议(SDP)是描述连接的多媒体内容(如分辨率、格式、编解码器、加密等)的标准,以便两个对等点在数据传输时能够相互理解。本质上,这是描述内容的元数据,而不是媒体内容本身。

因此,从技术上讲,SDP并不是一个真正的协议,而是一种用于描述设备之间共享媒体的连接的数据格式。

记录SDP远远超出了本文档的范围;然而,这里有一些事情值得注意。

结构
SDP由一行或多行UTF-8文本组成,每一行都以一个字符类型开头,后跟一个等号(“=”),后跟由值或描述组成的结构化文本,其格式取决于类型。以给定字母开头的文本行通常被称为“字母行”。例如,提供媒体描述的行具有“m”类型,因此这些行被称为“m-line”。
WebRTC 系列文章 WebRTC基本概念理解_第5张图片


推荐阅读:

WebSocket消息推送和聊天功能实现

ICE服务器建立 (本周更新)

一个实现了一对一视频通话和文字聊天的demo(java实现的信令服务器)

WebRTC 系列文章 WebRTC基本概念理解_第6张图片

WebRTC 系列文章 WebRTC基本概念理解_第7张图片


推荐阅读

WebRTC 系列文章 ICE服务器搭建 coturn

WebRTC 系列文章 实现Web一对一视频通话和文字聊天(兼容手机和PC)

你可能感兴趣的:(rtc,webrtc,websocket,ice,p2p)