RTCPeerConnection: signalingState property
BaselineWidely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2017.
ThesignalingState
read-only property of theRTCPeerConnection
interface returns a string value describing the state of the signaling process on the local end of the connection while connecting or reconnecting to another peer.SeeSignaling in our WebRTC session lifetime page.
Because the signaling process is a state machine, being able to verify that your code is in the expected state when messages arrive can help avoid unexpected and avoidable failures.For example, if you receive an answer while thesignalingState
isn't"have-local-offer"
, you know that something is wrong, since you should only receive answers after creating an offer but before an answer has been received and passed intoRTCPeerConnection.setLocalDescription()
. Your code will be more reliable if you watch for mismatched states like this and handle them gracefully.
This value may also be useful during debugging, for example.
In addition, when the value of this property changes, asignalingstatechange
event is sent to theRTCPeerConnection
instance.
Value
The allowed string values are:
stable
There is no ongoing exchange of offer and answer underway.This may mean that the
RTCPeerConnection
object is new, in which case both thelocalDescription
andremoteDescription
arenull
;it may also mean that negotiation is complete and a connection has been established.have-local-offer
The local peer has called
RTCPeerConnection.setLocalDescription()
, passing in SDP representing an offer (usually created by callingRTCPeerConnection.createOffer()
), and the offer has been applied successfully.have-remote-offer
The remote peer has created an offer and used the signaling server to deliver it to the local peer, which has set the offer as the remote description by calling
RTCPeerConnection.setRemoteDescription()
.have-local-pranswer
The offer sent by the remote peer has been applied and an answer has been created (usually by calling
RTCPeerConnection.createAnswer()
) and applied by callingRTCPeerConnection.setLocalDescription()
.This provisional answer describes the supported media formats and so forth, but may not have a complete set of ICE candidates included.Further candidates will be delivered separately later.have-remote-pranswer
A provisional answer has been received and successfully applied in response to an offer previously sent and established by calling
setLocalDescription()
.closed
The
RTCPeerConnection
has been closed.
Examples
const pc = new RTCPeerConnection(configuration);const state = pc.signalingState;
Specifications
Specification |
---|
WebRTC: Real-Time Communication in Browsers # dom-peerconnection-signaling-state |