RTCPeerConnection: signalingState 屬性

Baseline 已廣泛支援

此功能已成熟,可跨多種裝置和瀏覽器版本使用。自 2017 年 9 月以來,它已在瀏覽器中提供。

RTCPeerConnection 介面的只讀屬性 signalingState 返回一個字串值,該值描述了連線或重新連線到另一個對等端時,連線本地端的信令過程的狀態。請參閱我們 WebRTC 會話生命週期頁面上的 信令

由於信令過程是一個狀態機,因此能夠驗證您的程式碼在訊息到達時處於預期狀態有助於避免意外和可避免的故障。例如,如果您在 signalingState 不是 "have-local-offer" 時收到應答,您就知道有問題,因為您應該只在建立 offer 之後、但在應答被接收並傳遞到 RTCPeerConnection.setLocalDescription() 之前收到應答。如果您注意並優雅地處理這種不匹配的狀態,您的程式碼將更可靠。

此值在除錯過程中也可能很有用,例如。

此外,當此屬性的值發生更改時,會向 RTCPeerConnection 例項傳送一個 signalingstatechange 事件。

允許的字串值是

stable

目前沒有正在進行的 offer 和 answer 交換。這可能意味著 RTCPeerConnection 物件是新的,在這種情況下,localDescriptionremoteDescription 都為 null;這也可能意味著協商已完成,並且連線已建立。

have-local-offer

本地對等端已呼叫 RTCPeerConnection.setLocalDescription(),傳遞了代表 offer 的 SDP(通常透過呼叫 RTCPeerConnection.createOffer() 建立),並且 offer 已成功應用。

have-remote-offer

遠端對等端已建立 offer,並使用信令伺服器將其傳遞給本地對等端,本地對等端已透過呼叫 RTCPeerConnection.setRemoteDescription() 將該 offer 設定為遠端描述。

have-local-pranswer

遠端對等端傳送的 offer 已被應用,並且已經透過呼叫 RTCPeerConnection.setLocalDescription() 建立(通常透過呼叫 RTCPeerConnection.createAnswer())並應用了一個應答。這個臨時應答描述了支援的媒體格式等,但可能不包含完整的 ICE 候選集。後續的候選將稍後單獨傳遞。

have-remote-pranswer

已收到一個臨時應答,併成功應用到先前透過呼叫 setLocalDescription() 傳送並建立的 offer 上。

closed

RTCPeerConnection 已關閉。

示例

js
const pc = new RTCPeerConnection(configuration);
const state = pc.signalingState;

規範

規範
WebRTC:瀏覽器中的即時通訊
# dom-peerconnection-signaling-state

瀏覽器相容性

另見