RTCPeerConnection()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.

RTCPeerConnection() 构造函数返回一个新建的 RTCPeerConnection 实例,它代表了本地端机器与远端机器的一条连接。

语法

js
new RTCPeerConnection()
new RTCPeerConnection(configuration)

参数

configuration 可选

一个对象,用于提供配置新连接的选项:

bundlePolicy 可选

指定当远程对等点与 SDP BUNDLE 标准不兼容时,应如何处理候选的协商。如果远程端点可以感知 BUNDLE,则在协商完成时,所有媒体轨道和数据通道都将捆绑到单个传输上,而不管使用何种策略,并且最初创建的任何多余传输都将在此时关闭。

用技术术语来说,BUNDLE 允许两个对等点之间的所有媒体流流经单个 5 元组;也就是说,使用相同的传输协议从一个对等点的单个 IP 和端口到另一个对等点的单个 IP 和端口。

如果假定为不平衡(balanced),这必须是以下字符串值之一:

balanced

ICE 代理最初为每一种内容类型(音频、视频、数据通道)创建一个 RTCDtlsTransport。如果远程端点无法感知 BUNDLE,那么每一个 DTLS 传输用于处理一种数据类型的通信。

max-compat

ICE 代理最初为每个媒体轨道创建一个 RTCDtlsTransport,对数据通道则创建一个单独的传输。如果远程端点无法感知 BUNDLE,那么对于所有的内容都会协商一个单独的 DTLS 传输。

max-bundle

ICE 代理最初仅创建一个 RTCDtlsTransport 来承载所有的 RTCPeerConnection 的数据。如果远程端点无法感知 BUNDLE,那么仅会协商一个轨道而忽略其余的轨道。

certificates 可选

一个由 RTCCertificate 对象组成的数组,用于连接的身份验证。如果未指定该属性,则会为每一个 RTCPeerConnection 实例自动创建一组证书。尽管一个给定的连接只使用一个证书,但提供多个证书可以支持多种算法,从而提高某些情况下的连接成功的机率。参见使用证书以了解更多信息。

备注: 此配置选项在首次指定后便不能更改;一旦设置了证书,此属性将在之后调用 RTCPeerConnection.setConfiguration() 时被忽略。

iceCandidatePoolSize 可选

一个无符号 16 位整数,其指定了预获取的 ICE 候选池的大小。其默认值为 0(表示不会发生候选的预获取)。你可能会发现,在某些情况下,通过在尝试建立连接前允许 ICE 代理预获取 ICE 候选,可以更快地建立连接,以在调用 RTCPeerConnection.setLocalDescription() 时,已可以检查连接。

备注: 改变 ICD 候选池的大小可能会触发 ICE 收集的开始。

iceServers 可选

一个由 RTCIceServer 对象组成的数组,每个对象描述一个可能被 ICE 代理使用的服务器;这些通常是 STUN 或 TURN 服务器。如果未指定,则将在没有可用的 STUN 或 TURN 服务器的情况下进行连接尝试,这将连接限制为本地对等点。

iceTransportPolicy 可选

当前的 ICE 传输策略;如果未指定策略,则默认使用 all 策略,允许考虑所有的候选。可能的值有:

"all"

所有的 ICE 候选都会被考虑。

"public" 已弃用

只有拥有公共 IP 地址的 ICE 候选才会被考虑。在 2016 年 5 月 13 日的规范工作草案中被移除。

"relay"

只有 IP 地址被中继的 ICE 候选,例如那些通过 STUN 或 TURN 服务器传递的,才会被考虑。

peerIdentity 可选

一个字符串,用于指定 RTCPeerConnection 目标对等点的标识。如果设置了该值(其默认为 null),则在成功验证远程对等点的身份为给定的名称之前,RTCPeerConnection 不会与其建立连接。

rtcpMuxPolicy 可选

收集 ICE 候选时使用的 RTCP mux 策略,以支持非复用的 RTCP。可能的值有:

negotiate

指示 ICE 代理收集 RTPRTCP 候选。如果远程对等点支持 RTCP 复用,那么 RTCP 候选将在相应的 RTP 候选之上多路复用。否则,分别返回 RTP 和 RTCP 候选。

require

告诉 ICE 代理仅收集 RTP 的 ICE 候选,并在它们之上多路复用 RTCP。如果远程对等点不支持 RTCP 多路复用,则会话协商失败。这是默认值。

返回值

一个新建的 RTCPeerConnection 对象,如果指定了配置信息(configuration),它按照指定配置进行配置,否则,它将按照基本配置进行配置。

使用证书

当你希望为一个 RTCPeerConnection 使用自己的证书,而不是让 RTCPeerConnection 自动生成,你可以通过调用静态函数 RTCPeerConnection.generateCertificate() 来实现。

certificates 属性值在首次指定后便无法更改。如果在传递到调用的 setConfiguration() 函数的配置信息中包含了该属性,则该属性会被忽略。

该属性支持提供多个证书,因为即使给定的 DTLS 连接仅使用一个证书,提供多个证书也可以支持多种加密算法。RTCPeerConnection 的实现会根据其和远程的对等点支持的算法来选择要使用的证书,这在 DTLS 握手期间确定。

如果你不提供证书,则会自动生成新的证书。提供你自己的证书有一个明显的好处:身份密钥的连续性——如果你对后续的调用使用相同的证书,则远程对等点可以告诉你是同一个调用者。这也避免生成新密钥的成本。

规范

Specification
WebRTC: Real-Time Communication in Browsers
# dom-peerconnection

浏览器兼容性

BCD tables only load in the browser

参见