RTCPeerConnection.createAnswer()

The createAnswer() method on the RTCPeerConnection interface creates an SDP answer to an offer received from a remote peer during the offer/answer negotiation of a WebRTC connection. The answer contains information about any media already attached to the session, codecs and options supported by the browser, and any ICE candidates already gathered. The answer is delivered to the returned Promise, and should then be sent to the source of the offer to continue the negotiation process.

Syntax

aPromise = RTCPeerConnection.createAnswer([options]);

RTCPeerConnection.createAnswer(successCallback, failureCallback[, options]);  

Parameters

options Optional
An object which contains options which customize the answer; this is based on the RTCAnswerOptions dictionary.

Deprecated parameters

In older code and documentation, you may see a callback-based version of this function. This has been deprecated and its use is strongly discouraged. You should update any existing code to use the Promise-based version of createAnswer() instead. The parameters for this form of createAnswer() are described below, to aid in updating existing code.

successCallback
An RTCSessionDescriptionCallback which will be passed a single RTCSessionDescription object describing the newly-created answer.
failureCallback
An RTCPeerConnectionErrorCallback which will be passed a single DOMException object explaining why the request to create an answer failed.
options Optional
An optional RTCOfferOptions object providing options requested for the answer.

Exceptions

NotReadableError
The identity provider wasn't able to provide an identity assertion.
OperationError
Generation of the SDP failed for some reason; this is a general failure catch-all exception.

Return value

A Promise whose fulfillment handler is called with an object conforming to the RTCSessionDescriptionInit dictionary which contains the SDP answer to be delivered to the other peer.

Example

Here is a segment of code taken from the code that goes with the article Signaling and video calling. This code comes from the handler for the message sent to carry an offer to another peer across the signaling channel.

Keep in mind that this is part of the signaling process, the transport layer for which is an implementation detail that's entirely up to you. In this case, a WebSocket connection is used to send a JSON message with a type field with the value "video-answer" to the other peer, carrying the answer to the device which sent the offer to connect. The contents of the object being passed to the sendToServer() function, along with everything else in the promise fulfillment handler, depend entirely on your design

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

This asks RTCPeerConnection to create and return a new answer. In our promise handler, the returned answer is set as the description of the local end of the connection by calling setLocalDescription().

Once that succeeds, the answer is sent to the signaling server using whatever protocol you see fit.

Promise.catch() is used to trap and handle errors.

See Handling the invitation in Signaling and video calling to see the complete code, in context, from which this snippet is derived; that will help you understand the signaling process and how answers work.

Specifications

Specification Status Comment
WebRTC 1.0: Real-time Communication Between Browsers
The definition of 'createAnswer()' in that specification.
Candidate Recommendation Initial definition.

Browser compatibility

Update compatibility data on GitHub
DesktopMobile
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidEdge MobileFirefox for AndroidOpera for AndroidiOS SafariSamsung Internet
Basic support
Experimental
Chrome Full support 56
Notes
Full support 56
Notes
Notes Promise based version and unprefixed.
No support 50 — 56
Notes
Notes Promise based version.
Edge Full support 15Firefox Full support 22IE ? Opera Full support 43
Notes
Full support 43
Notes
Notes Promise based version.
No support 37 — 43
Safari ? WebView Android Full support 56
Notes
Full support 56
Notes
Notes Promise based version and unprefixed.
No support 50 — 56
Notes
Notes Promise based version.
Chrome Android Full support 56
Notes
Full support 56
Notes
Notes Promise based version and unprefixed.
No support 50 — 56
Notes
Notes Promise based version.
Edge Mobile Full support YesFirefox Android Full support 44Opera Android Full support 43
Notes
Full support 43
Notes
Notes Promise based version.
No support 37 — 43
Safari iOS ? Samsung Internet Android Full support 6.0
Notes
Full support 6.0
Notes
Notes Promise based version and unprefixed.
No support 5.0 — 6.0
Notes
Notes Promise based version.

Legend

Full support  
Full support
Compatibility unknown  
Compatibility unknown
Experimental. Expect behavior to change in the future.
Experimental. Expect behavior to change in the future.
See implementation notes.
See implementation notes.

Document Tags and Contributors

Contributors to this page: Sheppy, fscholz, adnauseum, chrisdavidmills, jpmedley, abbycar
Last updated by: Sheppy,