GOOGLE WebRTC Summarized
WebRTC(Web实时通信)是一项使Web应用程序和站点能够捕获和可选地传输音频和/或视频媒体,以及在不需要中介程序的情况下在浏览器之间交换任意数据的技术。包含WebRTC的标准集使共享数据和执行对等电话会议成为可能,而无需用户安装插件或任何其他第三方软件。
WebRTC由几个相互关联的API和协议组成,这些API和协议协同工作以实现这一目标。您将在此处找到的文档将帮助您了解WebRTC的基础知识,如何设置和使用数据和媒体连接以及其他内容。
WebRTC的概念和用法
WebRTC 具有多种用途;它们与Media Capture 和 Streams API一起,为Web提供了强大的多媒体功能,包括对音频和视频会议,文件交换,屏幕共享,身份管理的支持,以及与传统电话系统的接口,包括对发送DTMF(按键音)的支持。拨号)信号。对等点之间的连接可以不需要任何特殊的驱动程序或插件,并且通??梢栽诿挥腥魏沃屑浞衿鞯那榭鱿陆?。
两个对等方之间的连接由RTCPeerConnection接口表示。使用建立和打开连接后RTCPeerConnection,可以将媒体流MediaStream和/或数据通道RTCDataChannel添加到连接中。
媒体流可以包含任意数量的媒体信息轨道;基于MediaStreamTrack接口的对象表示的轨道可能包含多种类型的媒体数据之一,包括音频,视频和文本(例如字幕甚至章节名称)。大多数流至少包含一个音频轨道,也可能包括一个视频轨道,并且可以用于发送和接收实时媒体或存储的媒体信息(例如流电影)。
您也可以使用两个对等点之间的连接来使用该RTCDataChannel接口交换任意二进制数据。它可以用于反向通道信息,元数据交换,游戏状态数据包,文件传输,甚至可以用作数据传输的主要通道。
webRTC 文档接口
这些接口,词典和类型用于设置,打开和管理WebRTC连接。其中包括代表对等媒体连接,数据通道的接口,以及在交换有关每个对等方功能的信息时使用的接口,以便为双向媒体连接选择最佳配置
接口
RTCPeerConnection
表示本地计算机和远程对等方之间的WebRTC连接。它用于处理两个对等点之间的有效数据流。
该RTCPeerConnection接口表示本地计算机和远程对等方之间的WebRTC连接。它提供了连接到远程对等方,维护和监视连接以及在不再需要时关闭连接的方法。
所述RTCPeerConnection()构造函数返回一个新创建的RTCPeerConnection,其代表在本地设备和远程服务器之间的连接。
RTCDataChannel
表示连接的两个对等点之间的双向数据通道。
RTCIceCandidate
代表候选交互式连接建立(ICE)服务器以建立一个RTCPeerConnection。
ICE(交互式连接建立)是WebRTC(以及其他技术)使用的用于连接两个对等点的框架,而与网络拓扑结构无关(通常用于音频和视频聊天)。即使两个对等方可能都使用网络地址转换器(NAT)与各自本地网络上的其他设备共享全局IP地址,该协议也可以使两个对等方之间找到并建立连接。**
框架算法会寻找连接两个对等方的最低延迟路径,并按顺序尝试以下选项:
直接UDP连接(在这种情况下(并且仅在这种情况下,使用STUN服务器查找对等方的面向网络的地址))
通过HTTP端口的直接TCP连接
通过HTTPS端口直接进行TCP连接
通过中继/ TURN服务器的间接连接(如果直接连接失败,例如,如果一个对等点位于阻止NAT穿越的防火墙之后
TURN
(使用围绕NAT的中继进行遍历)是使计算机能够从网络地址转换器(NAT)或防火墙后面接收和发送数据的协议。WebRTC使用TURN 来允许Internet上的任何两个设备进入对等连接。
STUN
(用于NAT的会话遍历实用程序)是用于在NAT(网络地址转换器)周围传输数据的辅助协议。STUN返回NAT后面的联网计算机的IP地址, 端口和连接状态。
NAT
(网络地址转换)是一种允许多台计算机共享IP地址的技术。NAT为本地网络上的每台计算机分配唯一的地址,并调整传入/传出的网络流量以将数据发送到正确的位置。
WebRTC协议简介
ICE
交互式连接建立(ICE)是允许您的Web浏览器与对等方连接的框架。从对等A到对等B的直接连接根本无法工作有很多原因。它需要绕过防火墙,以防止打开连接;如果在大多数情况下,您的设备没有公用IP地址,则为您提供一个唯一的地址;如果您的路由器不允许您直接与对等方连接,则需要通过服务器中继数据。
STUN
NAT的会话遍历实用程序(STU N)(首字母缩写词为缩写)是一种协议,用于发现您的公共地址并确定路由器中可能阻止与对等方直接连接的任何限制。
客户端将向Internet上的STUN服务器发送请求,该服务器将使用客户端的公共地址以及客户端是否可以通过路由器NAT进行访问进行回复。
NAT
网络地址转换(NAT)用于为您的设备提供公共IP地址。路由器将具有公用IP地址,并且连接到路由器的每个设备都将具有专用IP地址。请求将通过唯一端口从设备的专用IP转换为路由器的公共IP。这样,您不需要每个设备都有唯一的公用IP,但仍可以在Internet上找到它。
某些路由器将限制谁可以连接到网络上的设备。这可能意味着即使我们拥有STUN服务器找到的公共IP地址,也没有任何人可以创建连接。在这种情况下,我们需要转向TURN。
TURN
一些使用NAT的路由器采用称为“对称NAT”的限制。这意味着路由器将只接受来自先前连接的对等方的连接。
使用围绕NAT(TURN)的中继进行遍历旨在通过打开与TURN服务器的连接并通过该服务器中继所有信息来绕过对称NAT限制。您将与TURN服务器建立连接,并告诉所有对等方将数据包发送到服务器,然后将其转发给您。显然这会带来一些开销,因此仅在没有其他选择时才使用。
SDP
会话描述协议(SDP)是用于描述连接的多媒体内容(例如分辨率,格式,编解码器,加密等)的标准,以便一旦数据传输,两个对等方就可以相互理解。从本质上讲,这是描述内容的元数据,而不是媒体内容本身。
从技术上讲,SDP并不是真正的协议,而是一种用于描述在设备之间共享媒体的连接的数据格式
记录SDP远远超出了本文档的范围。但是,这里有几件事值得注意。
SDP由一行或多行UTF-8文本组成,每行以一个字符的类型开头,后跟等号("="),然后是包含值或描述的结构化文本,其格式取决于类型。以给定字母开头的文本行通常称为“ 字母行”。例如,提供媒体描述的行的类型为"m",因此这些行称为“ m行”。
<type>:大小写敏感的一个字符,代表特定的属性,比如v代表版本;
<value>:结构化文本,格式与属性类型有关,UTF8编码;
=两边不允许存在空格;
=*表示是可选的;
以下面的SDP为例:
v=0
o=alice 2890844526 2890844526 IN IP4 host.anywhere.com
s=
c=IN IP4 host.anywhere.com
t=0 0
m=audio 49170 RTP/AVP 0
a=rtpmap:0 PCMU/8000
m=video 51372 RTP/AVP 31
a=rtpmap:31 H261/90000
m=video 53000 RTP/AVP 32
a=rtpmap:32 MPV/90000
各字段含义如下:
username:发起者的用户名,不允许存在空格,如果应用不支持用户名,则为-。
sess-id:会话id,由应用自行定义,规范的建议是NTP(Network Time Protocol)时间戳。
sess-version:会话版本,用途由应用自行定义,只要会话数据发生变化时(比如编码),sess-version随着递增就行。同样的,规范的建议是NTP时间戳。
nettype:网络类型,比如IN表示Internet。
addrtype:地址类型,比如IP4、IV6
unicast-address:域名,或者IP地址。
其中:
media:媒体类型。包括 video、audio、text、application、message等。
port:传输媒体流的端口,具体含义取决于使用的网络类型(在c=中声明)和使用的协议(proto,在m=中声明)。
proto:传输协议,具体含义取决于