RTCPeerConnection:createAnswer() 方法

Baseline 已广泛支持

此功能已成熟,可跨多种设备和浏览器版本使用。自 2017 年 9 月以来,它已在浏览器中提供。

RTCPeerConnection 接口的 createAnswer() 方法在 WebRTC 连接的 offer/answer 协商过程中,用于创建对从远程端收到的 offer 的 SDP answer。

answer 包含有关会话中已附加的媒体、浏览器支持的编解码器和选项以及已收集的任何 ICE 候选的信息。answer 将传递给返回的 Promise,然后应将其发送到 offer 的源以继续协商过程。

语法

js
createAnswer()
createAnswer(options)

createAnswer(successCallback, failureCallback) // deprecated
createAnswer(successCallback, failureCallback, options) // deprecated

参数

options 可选

一个可选对象,提供 answer 的请求选项。目前,没有可用的选项。

已弃用的参数

在旧的代码和文档中,您可能会看到此函数的回调版本。该版本已被弃用,并且 **强烈** 不建议使用。您应该更新任何现有代码,以使用 `createAnswer()` 的 Promise 版本。为了帮助更新现有代码,下面将介绍 `createAnswer()` 旧格式的参数。

successCallback 已弃用

一个 回调函数,该函数将接收一个描述新创建的 answer 的 RTCSessionDescription 对象。

failureCallback 已弃用

一个 回调函数,该函数将接收一个 DOMException 对象,解释创建 answer 的请求失败的原因。

options 可选

一个可选对象,提供 answer 的请求选项。

异常

NotReadableError

身份提供商未能提供身份断言。

OperationError

由于某种原因,SDP 的生成失败;这是一个通用的捕获所有异常的失败。

返回值

一个 Promise,它将使用一个包含 RTCSessionDescription 对象相同属性的对象来完成。

type

一个值为 "answer" 的字符串。

SDP

一个包含描述会话的 SDP 的字符串,将发送给远程端。

示例

以下代码段取自随文章 Signaling and video calling 提供的代码。此代码来自处理发送 offer 给另一个对等方的消息的处理程序,该消息通过信令通道传输。

注意: 请记住,这是信令过程的一部分,其传输层是完全由您自己决定的实现细节。在这种情况下,使用 WebSocket 连接发送一个具有 type 字段(值为 "video-answer")的 JSON 消息给另一个对等方,将 answer 传送到发送连接 offer 的设备。传递给 sendToServer() 函数的对象的内容,以及 Promise fulfillment handler 中的所有其他内容,完全取决于您的设计。

js
pc.createAnswer()
  .then((answer) => pc.setLocalDescription(answer))
  .then(() => {
    // Send the answer to the remote peer through the signaling server.
  })
  .catch(handleGetUserMediaError);

这会请求 RTCPeerConnection 创建并返回一个新的 answer。在我们的 Promise handler 中,通过调用 setLocalDescription(),将返回的 answer 设置为连接本地端的描述。

一旦成功,answer 将使用您选择的任何协议发送到信令服务器。

使用 Promise.catch() 来捕获和处理错误。

请参阅我们 WebRTC 聊天示例中的 Handling the invitation,以查看此片段所源自的完整代码;这将帮助您理解信令过程以及 answer 的工作原理。

规范

规范
WebRTC:浏览器中的实时通信
# dom-rtcpeerconnection-createanswer

浏览器兼容性