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 |
浏览器兼容性
加载中…