RTCPeerConnection:negotiationneeded 事件

Baseline 已廣泛支援

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

當需要透過信令通道進行連線協商時,會向 RTCPeerConnection 傳送一個 negotiationneeded 事件。這會在連線的初始設定期間發生,也會在任何時候通訊環境發生變化需要重新配置連線時發生。

當媒體首次新增到連線時,會向 RTCPeerConnection 觸發 negotiationneeded 事件。這會透過指示您的程式碼開始透過信令伺服器交換 ICE 候選物件來啟動 ICE 協商過程。請參閱 信令事務流程 以瞭解以 negotiationneeded 事件開始的信令過程的描述。

此事件不可取消,也不會冒泡。

語法

在諸如 addEventListener() 之類的方法中使用事件名稱,或設定事件處理程式屬性。

js
addEventListener("negotiationneeded", (event) => { })

onnegotiationneeded = (event) => { }

事件型別

一個通用的 Event

示例

在此示例中,我們使用 addEventListener()negotiationneeded 建立一個事件處理程式。它的作用是建立一個 SDP Offer 並透過信令通道將其傳送給遠端對等方。

js
pc.addEventListener("negotiationneeded", (ev) => {
  pc.createOffer()
    .then((offer) => pc.setLocalDescription(offer))
    .then(() =>
      sendSignalingMessage({
        type: "video-offer",
        sdp: pc.localDescription,
      }),
    )
    .catch((err) => {
      // handle error
    });
});

建立 Offer 後,透過呼叫 RTCPeerConnection.setLocalDescription() 配置本地端;然後建立一個信令訊息並透過信令伺服器傳送給遠端對等方,以與另一個對等方共享該 Offer。另一個對等方應該識別此訊息,並透過建立自己的 RTCPeerConnection,使用 setRemoteDescription() 設定遠端描述,然後建立 Answer 傳送回 Offer 對等方來跟進。

您也可以透過將事件處理函式分配給 onnegotiationneeded 屬性來為 negotiationneeded 事件設定事件處理程式。

js
pc.onnegotiationneeded = (ev) => {
  pc.createOffer()
    .then((offer) => pc.setLocalDescription(offer))
    .then(() =>
      sendSignalingMessage({
        type: "video-offer",
        sdp: pc.localDescription,
      }),
    )
    .catch((err) => {
      // handle error
    });
};

有關更詳細的示例,請參閱 開始協商

規範

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

瀏覽器相容性

另見