RTCPeerConnection:negotiationneeded 事件
當需要透過信令通道進行連線協商時,會向 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 |
瀏覽器相容性
載入中…