--- title: RTCPeerConnection.createOffer() slug: Web/API/RTCPeerConnection/createOffer tags: - API - Media - RTCPeerConnection - Reference - SDP - WebRTC - createOffer translation_of: Web/API/RTCPeerConnection/createOffer ---
aPromise = myPeerConnection.createOffer([options]); myPeerConnection.createOffer(successCallback, failureCallback, [options]) {{deprecated_inline}}
RTCOfferOptions
词典提供要约所要求的选项。RTCOfferOptions
词典被用于自定义通过此方法创建offer。
iceRestart
{{optional_inline}}true
。 这将导致返回的 offer 与已经存在的凭证不同。 如果您应用返回的offer,则ICE将重新启动。 指定false
以保留相同的凭据,因此不重新启动ICE。 默认值为false
。offerToReceiveAudio
{{optional_inline}} (Legacy)传统的布尔选项,用于控制是否向远程对等方提供尝试发送音频的机会。 如果该值为false
,即使本地端将发送音频数据,也不会提供远程端点发送音频数据。 如果此值为true
,即使本地端不会发送音频数据,也将向远程端点发送音频数据。 默认行为是仅在本地发送音频时才提供接收音频,否则不提供。
offerToReceiveVideo
{{optional_inline}} (Legacy)false
,即使本地端将发送视频数据,也不会提供远程端点发送视频数据。 如果此值为true
,即使本地端将不发送视频数据,也将向远程端点发送视频数据。 默认行为是仅在本地端正在发送视频时才提供接收视频,否则不提供。false
将设置所有现有视频收发器的方向以排除接收(即设置为“仅发送”或“无效”)。voiceActivityDetection
{{optional_inline}}true
(启用语音活动检测)。在较早的代码和文档中,您可能会看到此函数的基于回调的版本。 不推荐使用并强烈建议不要使用它。 您应该更新任何现有代码,以使用基于 {{jsxref("Promise")}}的createOffer()
版本。 下面介绍了这种形式的createOffer()
的参数,以帮助更新现有代码。
successCallback
{{deprecated_inline}}errorCallback
{{deprecated_inline}}options
{{optional_inline}}RTCOfferOptions
词典,提供 offer所要求的选项。{{jsxref("Promise")}}的履行处理程序将接收符合{{domxref("RTCSessionDescriptionInit")}}字典的对象,该字典包含描述所生成 offer 的SDP。 收到的 offer 应通过信令服务器传递到。
通过拒绝返回的承诺返回这些异常。 您的拒绝处理程序应检查收到的异常,以确定发生了哪些异常。
InvalidStateError
RTCPeerConnection
被关闭.NotReadableError
createOffer()
无法创建新证书。 由于需要保护所有WebRTC连接,因此会导致错误。OperationError
在这里,我们看到了{{event("negotiationneeded")}}事件的处理程序,该处理程序创建了要约,并通过信令通道将其发送到远程系统。
笔记: 请记住,这是信令过程的一部分,传输层的实现细节完全由您决定。 在这种情况下,WebSocket连接用于向其他端点发送带有值为“ video-offer”的类型字段的{{Glossary("JSON")}}消息。 传递给sendToServer()
函数的对象的内容,以及承诺履行处理程序中的所有其他内容,完全取决于您的设计。
myPeerConnection.createOffer().then(function(offer) { return myPeerConnection.setLocalDescription(offer); }) .then(function() { sendToServer({ name: myUsername, target: targetUsername, type: "video-offer", sdp: myPeerConnection.localDescription }); }) .catch(function(reason) { // An error occurred, so handle the failure to connect });
在此代码中,创建了offer,一旦成功,就将{{domxref("RTCPeerConnection")}}的本地端配置为通过传递要约进行匹配(使用符合{{domxref("RTCSessionDescriptionInit")}})放入{{domxref("RTCPeerConnection.setLocalDescription", "setLocalDescription()")}}。 完成后,要约将通过信令通道发送到远程系统。 在这种情况下,使用名为sendToServer()
的自定义函数。 信令服务器的实现独立于WebRTC规范,因此只要主叫方和潜在接收方都使用相同的offer,如何发送offer都无关紧要。
用 {{jsxref("Promise.catch()")}} 来捕获和处理错误.
请参阅 Signaling and video calling,以获取此摘录的完整示例。 这将帮助您了解此处的信令代码如何工作。
Specification | Status | Comment |
---|---|---|
{{SpecName('WebRTC 1.0', '#dom-rtcpeerconnection-createoffer', 'createOffer()')}} | {{Spec2('WebRTC 1.0')}} | Initial definition. |
{{Compat("api.RTCPeerConnection.createOffer")}}