--- title: RTCPeerConnection.onicecandidate slug: Web/API/RTCPeerConnection/onicecandidate translation_of: Web/API/RTCPeerConnection/onicecandidate ---
{{APIRef("WebRTC")}}
RTCPeerConnection
的属性 {{domxref("RTCPeerConnection.onicecandidate", "onicecandidate")}} (是一个事件触发器 {{event("Event_handlers", "event handler")}}) 能够让函数在事件{{event("icecandidate")}}发生在实例 {{domxref("RTCPeerConnection")}} 上时被调用。 只要本地代理{{Glossary("ICE")}} 需要通过信令服务器传递信息给其他对等端时就会触发。 这让本地代理与其他对等体相协商而浏览器本身在使用时无需知道任何详细的有关信令技术的细节,只需要简单地应用这种方法就可使用您选择的任何消息传递技术将ICE候选发送到远程对等方。
rtcPeerConnection.onicecandidate = eventHandler;
这应该设置为您提供的函数,该函数接受RTCPeerConnectionIceEvent
表示icecandidate
事件的对象作为输入。该功能应该通过信令服务器将可以在事件属性中找到其SDP的ICE候选者传递candidate
给远程对等体。
如果事件的candidate
属性是null
,ICE收集已经完成。不应将此消息发送到远程对等方。发生这种情况时,连接iceGatheringState
也已更改为complete
。你不需要明确地注意这一点; 相反,如果你需要感知信令的结束,你应该注意一个icegatheringstatechange
事件,表明ICE协商已经转变为complete
状态。
下面的示例基于文章信令和视频调用中的代码,为icecandidate
事件设置处理程序,以便将候选项发送到远程对等方。
pc.onicecandidate = function(event) { if (event.candidate) { // Send the candidate to the remote peer } else { // All ICE candidates have been sent } }
请注意,当检测到协议结束时{{domxref("RTCPeerConnectionIceEvent.candidate", "candidate")}} 属性为 null
.
Specification | Status | Comment |
---|---|---|
WebRTC 1.0:浏览器之间的实时通信 该规范中“RTCPeerConnection.onicecandidate”的定义。 |
{{ Spec2('WebRTC 1.0') }} | Initial specification. |
{{Compat("api.RTCPeerConnection.onicecandidate")}}