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.
* Some parts of this feature may have varying levels of support.
RTCPeerConnection
接口表示本地端和远程对等端之间的 WebRTC 连接。它提供了创建远程对等端连接、维护和监视连接,以及在连接不再需要时关闭连接的方法。
构造函数
RTCPeerConnection()
-
返回一个新的
RTCPeerConnection
实例,表示本地设备和远程对等端之间的连接。
实例属性
也从 EventTarget
继承属性。
canTrickleIceCandidates
只读-
返回一个布尔值,指示远程对等方是否可以接受涓流 ICE 候选。
connectionState
只读-
返回表示连接当前状态的下列字符串之一:
new
(新建)、connecting
(连接中)、connected
(已连接)、disconnected
(已断开连接)、failed
(连接失败)或closed
(已关闭)。 currentLocalDescription
只读-
返回一个
RTCSessionDescription
对象,该对象描述自上次RTCPeerConnection
完成协商并连接到远程对等设备后,最近一次成功协商的连接的本地端。同时也可能包括该描述所代表的提议或应答首次初始化的时候通过 ICE 代理生成的 ICE 候选项列表。 currentRemoteDescription
只读-
返回一个
RTCSessionDescription
对象,该对象描述自上次RTCPeerConnection
完成协商并连接到远程对等设备后,最近一次成功协商的连接的远程端。同时也可能包括该描述所代表的提议或应答首次初始化的时候通过 ICE 代理生成的 ICE 候选项列表。 iceConnectionState
只读-
返回与此 RTCPeerConnection 关联的 ICE 代理的状态字符串,可以是下列值之一:
new
、checking
、connected
、completed
、failed
、disconnected
或closed
。 iceGatheringState
只读-
返回一个描述连接的 ICE 收集状态的字符串。该属性可以检测 ICE 候选者是否已经收集完成,可能返回值有:
new
(新的)、gathering
(收集中)、complete
(完成)。 localDescription
只读-
返回一个
RTCSessionDescription
,代表这条连接的本地端的会话描述。如果本地的会话描述还没有被设置,返回null
。 peerIdentity
只读-
返回一个兑现为标识远程对等端
RTCIdentityAssertion
(其包含标识对等端身份的字符串)的Promise
。一旦这个Promise
成功兑现,得到的身份信息就是目标对等端的身份信息,并且在连接期间不会改变。 pendingLocalDescription
只读-
返回一个
RTCSessionDescription
对象,描述本地连接端的待定配置更改。这不是描述当前连接的状态,而是描述可能将存在的状态。 pendingRemoteDescription
只读-
返回一个
RTCSessionDescription
对象,描述远程连接端的待定配置更改。这不是描述当前连接的状态,而是描述可能将存在的状态。 remoteDescription
只读-
返回一个
RTCSessionDescription
对象,描述连接远端的会话,包括配置和媒体信息。如果当前尚未设置,将返回null
。 sctp
只读-
返回一个
RTCSctpTransport
对象,该对象描述了发送和接收 SCTP 数据所使用的 SCTP 传输层。如果 SCTP 尚未协商完成,则该值为null
。 signalingState
只读-
返回一个字符串,说明在连接或重新连接另一个对等端时,连接本地端的信令进程的状态。它是以下值之一:
stable
(稳定)、have-local-offer
(有本地提议)、have-remote-offer
(有远程提议)、have-local-pranswer
(有本地预答)、have-remote-pranswer
(有远程预答)、closed
(关闭)。
静态方法
RTCPeerConnection.generateCertificate()
-
创建一个 X.509 证书及其对应的私钥,返回一个
Promise
对象,其在证书生成后将会兑现为生成的新RTCCertificate
。
实例方法
也从 EventTarget
继承方法。
addIceCandidate()
-
向
RTCPeerConnection
的远程描述中添加一个新的远程候选者,描述连接的远程端的状态。 addTrack()
-
向要传输给对方的轨道集合中添加一个新的
MediaStreamTrack
。 addTransceiver()
-
创建一个新的
RTCRtpTransceiver
并将其添加到与连接关联的收发器集合中。每个收发器代表一个同时关联RTCRtpSender
和RTCRtpReceiver
的双向流。 close()
-
关闭当前连接,释放所有资源。
createAnswer()
-
发起创建 SDP 应答(answer),以响应来自远程对等方的提议(offer),在
WebRTC
连接的提议/应答协商过程中。应答包含会话中已附加的媒体、编解码器和浏览器支持的其它选项,以及已收集的 ICE 候选者的信息。 createDataChannel()
-
创建一个与远程对等连接的新通道,该通道可以传输任何类型的数据。例如图像、文件传输、文本聊天、游戏更新包等。
createOffer()
-
创建一个信息 SDP 提议(offer),以启动与远程对等方的新 WebRTC 连接。SDP 提议(offer)的内容包括已附加到 WebRTC 会话、编解码器和浏览器支持的选项的任何
MediaStreamTrack
对象的信息,以及 ICE 代理已收集的任何候选信息,目的是通过信令信道发送给潜在对等方,以请求连接或更新现有连接的配置。 getConfiguration()
-
返回一个包含当前连接配置的对象。
getIdentityAssertion()
-
该方法返回一个
Promise
,该Promise
兑现为编码为字符串的身份断言。仅在signalingState
的值不为closed
时解析有效。 getReceivers()
-
返回
RTCRtpReceiver
对象数组,每个对象都代表一个 RTP 接收器。 getSenders()
-
返回
RTCRtpSender
对象数组,每个对象都代表负责传输单个轨道数据的 RTP 发送器。 getStats()
-
返回一个
Promise
,它兑现为有关整个连接或特定MediaStreamTrack
的统计数据。 getTransceivers()
-
返回用于在连接上发送和接收数据的所有
RTCRtpTransceiver
对象的列表。 removeTrack()
-
停止从指定的轨道发送媒体数据,该方法不会从发送者列表(由
getSenders()
报告)中删除相应的RTCRtpSender
对象。如果轨道已经停止或者不在连接的发送者列表中,此方法没有效果。 restartIce()
-
允许轻松地要求在连接的两端重新进行 ICE 候选人收集,这简化了通过允许调用方或接收方使用相同的方法来触发 ICE 重启(重新收集候选者的)过程。
setConfiguration()
-
根据指定对象中的值设置连接的当前配置信息。这样你就可以更改连接使用的 ICE 服务器以及使用的传输策略。
setIdentityProvider()
-
将身份供应商(IdP)设置为参数中给出的三元组:名称(
name
)、用于与其通信的协议(protocol
)和用户名(username
),其中protocol
和username
为可选参数。 setLocalDescription()
-
修改与连接关联的本地描述,此描述指定连接的本地端的连接属性,包括媒体格式。此方法返回一个
Promise
, 配置修改成功后,该Promise
状态才会变更为fulfilled
,这是一个异步操作。 setRemoteDescription()
-
修改与连接关联的远程描述,此描述指定连接的远程端的连接属性,包括媒体格式。此方法返回一个
Promise
, 配置修改成功后,该Promise
状态才会变更为fulfilled
,这是一个异步操作。
废弃方法
addStream()
已弃用 非标准-
添加
MediaStream
作为本地音频或视频源。不应使用这种过时的方法,而应针对希望发送到远程对等设备的每个轨道调用一次addTrack()
。 createDTMFSender()
已弃用-
创建一个新的
RTCDTMFSender
,并与特定的MediaStreamTrack
相关联,以便通过连接发送 DTMF 电话信令。 removeStream()
已弃用 非标准-
移除作为本地音频或视频源的
MediaStream
。由于该方法已过时,应改用removeTrack()
。
事件
使用 addEventListener()
或将事件监听器分配给此接口的 oneventname
属性,即可监听这些事件。
connectionstatechange
-
当连接
RTCPeerConnection
状态改变时触发。 datachannel
-
当远程端添加
RTCDataChannel
至连接时触发。 icecandidate
-
当接收到新的 ICE 候选者时触发。
icecandidateerror
-
当收集 ICE 连接候选者时发生错误触发。
iceconnectionstatechange
-
当与 ICE 连接状态发生变更时触发。
icegatheringstatechange
-
当 ICE 的收集状态
iceGatheringState
发生变更时触发,状态值表示 ICE 协商状态:new
(尚未开始协商)、gathering
(开始收集候选者)、completed
(协商完成)。 negotiationneeded
-
当 ICE 连接需要协商或重新协商时触发,在第一次打开连接时或者网络发生变更时都会触发该事件,接收方应通过创建提议并将其发送给另一对等方来进行响应。
signalingstatechange
-
当连接的 ICE 信令状态发生变更时触发。
track
-
当新的轨道添加到连接中的
RTCRtpReceiver
实例时触发。
废弃事件
addstream
已弃用 非标准-
当新的
MediaStream
添加到连接时触发。与其监听这个过时的事件,不如监听track
事件;每向连接添加一个MediaStreamTrack
,就会触发一次。 removestream
已弃用 非标准-
当
MediaStream
被移除时触发。与其监听这个过时的事件,不如在每个流上监听removetrack
事件。
规范
Specification |
---|
WebRTC: Real-Time Communication in Browsers # interface-definition |
浏览器兼容性
BCD tables only load in the browser
参见
- https://github.com/jesup/nightly-gupshup/blob/master/static/js/chat.js
- WebRTC 入门
- TutorRoom:Node.js HTML 视频捕获,点对点视频和文件共享应用(GitHub 上的源代码)