RTCPeerConnection: createOffer() 方法
RTCPeerConnection 接口的 createOffer() 方法会启动一个 SDP offer 的创建过程,目的是与远程对等端建立一个新的 WebRTC 连接。
SDP offer 包含有关已附加到 WebRTC 会话的任何 MediaStreamTrack 对象、浏览器支持的编解码器和选项,以及 ICE 代理已收集到的任何候选项的信息,用于通过信令通道发送给潜在的对等端,以请求连接或更新现有连接的配置。
语法
createOffer()
createOffer(options)
createOffer(successCallback, failureCallback) // deprecated
createOffer(successCallback, failureCallback, options) // deprecated
参数
options可选-
一个提供以下选项的对象,用于请求 offer
iceRestart可选-
要重启活动连接上的 ICE,请将其设置为
true。这将导致返回的 offer 具有与当前已存在的不同的凭证。如果您随后应用返回的 offer,ICE 将会重启。指定false则保留相同的凭证,因此不会重启 ICE。默认值为false。与其使用此选项,不如考虑调用RTCPeerConnection.restartIce(),它将在下次调用createOffer()时自动设置此标志。 offerToReceiveAudio可选 已弃用-
提供对音频方向的额外控制。例如,无论是否发送音频,都可以使用它来确保可以接收音频。
offerToReceiveVideo可选 已弃用-
提供对视频方向的额外控制。例如,无论是否发送视频,都可以使用它来确保可以接收视频。
已弃用的参数
在旧代码和文档中,您可能会看到此函数的基于回调的版本。此版本已弃用,并且**强烈**不建议使用。您应该更新任何现有代码以使用 createOffer() 的基于 Promise 的版本。旧格式 createOffer() 的参数将在下文描述,以帮助更新现有代码。
successCallback已弃用-
一个 回调函数,它将接收一个单独的
RTCSessionDescription对象,该对象描述新创建的 offer。 errorCallback已弃用-
一个 回调函数,它将接收一个单独的
DOMException对象,解释请求创建 offer 失败的原因。 options可选-
一个可选对象,提供为 offer 请求的选项。
返回值
一个 Promise,它在解析时会返回一个包含与 RTCSessionDescription 对象相同属性的对象。
异常
这些异常通过拒绝返回的 promise 来返回。您的拒绝处理程序应检查接收到的异常以确定发生了哪个错误。
InvalidStateErrorDOMException-
当
RTCPeerConnection关闭时返回。 NotReadableErrorDOMException-
如果未提供用于保护连接的证书或证书集,并且
createOffer()无法创建新的证书,则返回此错误。由于所有 WebRTC 连接都需要安全,因此会导致错误。 OperationErrorDOMException-
如果确定生成 offer 所需的系统状态检查资源可用性时因某种原因失败,则返回此错误。
示例
这里我们看到了 negotiationneeded 事件的处理程序,该事件创建 offer 并通过信令通道将其发送到远程系统。
注意:请记住,这是信令过程的一部分,其传输层是完全由您自己决定的实现细节。在本例中,使用 WebSocket 连接发送一个 type 字段值为 "video-offer" 的 JSON 消息给另一个对等端。传递给 sendToServer() 函数的对象的内容,以及 Promise fulfilled handler 中的所有其他内容,完全取决于您的设计。
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(使用与 RTCSessionDescription 相同的形状的对象表示)传递给 setLocalDescription() 来进行匹配配置。完成此操作后,offer 将通过信令通道发送到远程系统;在本例中,是通过使用一个名为 sendToServer() 的自定义函数。信令服务器的实现独立于 WebRTC 规范,因此只要调用者和潜在接收者使用相同的信令服务器,发送 offer 的方式并不重要。
使用 Promise.catch() 来捕获和处理错误。
请参阅 信令与视频通话 以获取派生此代码片段的完整示例;这将帮助您理解这里的信令代码是如何工作的。
规范
| 规范 |
|---|
| WebRTC:浏览器中的实时通信 # dom-rtcpeerconnection-createoffer |
浏览器兼容性
加载中…