RTCPeerConnection: restartIce() 方法

Baseline 已廣泛支援

此特性已得到良好支援,可在多種裝置和瀏覽器版本上使用。自 2021 年 4 月起,所有瀏覽器均已支援此特性。

restartIce() 方法是 RTCPeerConnection 介面的一個方法,它允許 Web 應用程式請求在連線的兩端都重新進行 ICE 候選收集。這透過允許呼叫方或接收方使用相同的方法來觸發 ICE 重啟,從而簡化了該過程。

呼叫 restartIce() 後,下一次呼叫 createOffer() 返回的 offer 會自動配置為觸發本地對等端(一旦設定了本地對等端)和遠端對等端(一旦 offer 透過您的信令機制傳送並遠端對等端設定了其描述)的 ICE 重啟。

restartIce() 會在 RTCPeerConnection 上觸發 negotiationneeded 事件,以通知應用程式它應該透過其信令通道執行協商。

如果協商未能完成——無論是由於回滾還是因為正在處理傳入的 offer——RTCPeerConnection 會記住您請求了 ICE 重啟。下次當連線的 signalingState 變為 stable 時,連線將觸發 negotiationneeded 事件。此過程將一直持續,直到 ICE 重啟成功完成。

語法

js
restartIce()

引數

無。

返回值

無(undefined)。

用法說明

呼叫 restartIce() 後,使用 createOffer() 建立的下一個 offer 在透過您的信令機制傳送到遠端對等端後,將啟動 ICE 重啟。ICE 重啟本質上會重置 ICE,使其使用新的憑據建立所有新的候選。在此過程中,現有的媒體傳輸將繼續不間斷。

有關 ICE 重啟工作原理的詳細資訊,請參閱 ICE restartRFC 5245, section 9.1.1.1: ICE specification

示例

此示例建立了一個 iceconnectionstatechange 事件的處理器,該處理器透過重啟 ICE 來處理向 failed 狀態的過渡,以重試連線。

js
pc.addEventListener("iceconnectionstatechange", (event) => {
  if (pc.iceConnectionState === "failed") {
    /* possibly reconfigure the connection in some way here */
    /* then request ICE restart */
    pc.restartIce();
  }
});

有了這段程式碼,ICE 協商期間向 failed 狀態的過渡將觸發一個 negotiationneeded 事件,您的程式碼應響應此事件進行正常重新協商。但是,由於您呼叫了 restartIce(),您在 negotiationneeded 的處理器中呼叫的 createOffer() 將會觸發 ICE 重啟,而不僅僅是常規的重新協商。

規範

規範
WebRTC:瀏覽器中的即時通訊
# dom-rtcpeerconnection-restartice

瀏覽器相容性

另見