RTCPeerConnection:createOffer() 方法
createOffer()
是 RTCPeerConnection
接口的一个方法,用于启动创建 SDP offer,目的是与远程对等方建立新的 WebRTC 连接。
SDP offer 包含有关已附加到 WebRTC 会话的任何 MediaStreamTrack
对象、浏览器支持的编解码器和选项以及 ICE 代理已收集的任何候选者的信息,以便通过信令通道发送给潜在的对等方,以请求连接或更新现有连接的配置。
返回值是一个 Promise
,当 offer 创建完成后,该 Promise 会解析为一个包含新创建的 offer 的 RTCSessionDescriptionInit 字典。
语法
createOffer()
createOffer(options)
createOffer(successCallback, failureCallback) // deprecated
createOffer(successCallback, failureCallback, options) // deprecated
参数
options
可选-
一个对象,提供 offer 所需的以下选项
iceRestart
可选-
要在活动连接上重新启动 ICE,请将其设置为
true
。这将导致返回的 offer 具有与已有的不同的凭据。如果随后应用返回的 offer,ICE 将重新启动。指定false
以保留相同的凭据,从而不重新启动 ICE。默认值为false
。 offerToReceiveAudio
可选 已弃用-
提供对音频方向性的额外控制。例如,它可以用于确保可以接收音频,而不管是否发送音频。
offerToReceiveVideo
可选 已弃用-
提供对视频方向性的额外控制。例如,它可以用于确保可以接收视频,而不管是否发送视频。
已弃用的参数
在旧代码和文档中,您可能会看到此函数的基于回调的版本。此版本已弃用,强烈建议不要使用。您应该更新任何现有代码,以改为使用基于 Promise
的 createOffer()
版本。下面描述了旧版 createOffer()
的参数,以帮助更新现有代码。
successCallback
已弃用-
一个 回调函数,它将被传递一个描述新创建的 offer 的
RTCSessionDescription
对象。 errorCallback
已弃用-
一个 回调函数,它将被传递一个解释创建 offer 请求失败原因的
DOMException
对象。 options
可选-
一个可选对象,提供 offer 所需的选项。
返回值
一个 Promise
,其 fulfilled 处理程序将接收一个符合 RTCSessionDescriptionInit 字典的对象,该字典包含描述生成的 offer 的 SDP。接收到的 offer 应通过信令服务器传递给远程对等方。
异常
这些异常通过拒绝返回的 promise 来返回。您的拒绝处理程序应该检查接收到的异常以确定发生了哪种异常。
InvalidStateError
DOMException
-
如果
RTCPeerConnection
已关闭,则返回此异常。 NotReadableError
DOMException
-
如果未提供任何证书或证书集来保护连接,并且
createOffer()
无法创建新的证书,则返回此异常。由于所有 WebRTC 连接都需要受到保护,因此会导致错误。 OperationError
DOMException
-
如果出于某种原因检查系统状态以确定资源可用性以生成 offer 失败,则返回此异常。
示例
这里我们看到一个处理 negotiationneeded
事件的处理程序,该处理程序创建 offer 并将其通过信令通道发送到远程系统。
注意:请记住,这是信令过程的一部分,其传输层是一个实现细节,完全由您决定。在本例中,使用 WebSocket 连接向另一个对等方发送一个 type
字段值为 "video-offer" 的 JSON 消息。传递给 sendToServer()
函数的对象内容以及 promise fulfilled 处理程序中的所有其他内容都完全取决于您的设计。
myPeerConnection
.createOffer()
.then((offer) => myPeerConnection.setLocalDescription(offer))
.then(() => {
sendToServer({
name: myUsername,
target: targetUsername,
type: "video-offer",
sdp: myPeerConnection.localDescription,
});
})
.catch((reason) => {
// An error occurred, so handle the failure to connect
});
在此代码中,创建 offer,一旦成功,本地 RTCPeerConnection
端会通过将 offer(使用符合 RTCSessionDescriptionInit 的对象表示)传递给 setLocalDescription()
来配置以匹配。完成后,offer 将通过信令通道发送到远程系统;在本例中,使用名为 sendToServer()
的自定义函数。信令服务器的实现独立于 WebRTC 规范,因此无论如何发送 offer 都没关系,只要调用方和潜在的接收方都使用相同的服务器即可。
使用 Promise.catch()
来捕获和处理错误。
请参阅 信令和视频通话 以获取此代码段派生的完整示例;这将帮助您了解此处信令代码的工作原理。
规范
规范 |
---|
WebRTC:浏览器中的实时通信 # dom-rtcpeerconnection-createoffer |
浏览器兼容性
BCD 表格仅在启用了 JavaScript 的浏览器中加载。