RTCPeerConnection: negotiationneeded 事件
当需要通过信令通道协商连接时,会向 RTCPeerConnection
发送 negotiationneeded
事件。这发生在连接的初始设置期间,以及通信环境发生任何需要重新配置连接的更改时。
当首次将媒体添加到连接时,negotiationneeded
事件首先分派到 RTCPeerConnection
。这通过指示您的代码开始通过信令服务器交换 ICE 候选者来启动 ICE 协商过程。有关以 negotiationneeded
事件开始的信令过程的说明,请参阅 信令事务流程。
此事件不可取消,也不会冒泡。
语法
在诸如 addEventListener()
之类的方法中使用事件名称,或设置事件处理程序属性。
js
addEventListener("negotiationneeded", (event) => {});
onnegotiationneeded = (event) => {};
事件类型
一个通用的 Event
。
示例
在此示例中,我们使用 addEventListener()
为 negotiationneeded
创建一个事件处理程序。它的作用是创建一个 SDP 提供并将其通过信令通道发送到远程对等方。
js
pc.addEventListener(
"negotiationneeded",
(ev) => {
pc.createOffer()
.then((offer) => pc.setLocalDescription(offer))
.then(() =>
sendSignalingMessage({
type: "video-offer",
sdp: pc.localDescription,
}),
)
.catch((err) => {
// handle error
});
},
false,
);
创建提供后,通过调用 RTCPeerConnection.setLocalDescription()
配置本地端;然后创建信令消息并将其通过信令服务器发送到远程对等方,以与其他对等方共享该提供。另一个对等方应该识别此消息,并随后创建自己的 RTCPeerConnection
,使用 setRemoteDescription()
设置远程描述,然后创建要发送回提供对等方的应答。
您还可以通过将事件处理程序函数分配给 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 |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。