WebRTC
API's
RTCPeerConnection
interface offers the
restartIce()
method to allow a web application to easily request that
ICE
candidate gathering be redone on both ends of the connection.
This simplifies the process by allowing the same method to be used by either the caller or the receiver to trigger an ICE restart.
后于
restartIce()
returns, the offer returned by the next call to
createOffer()
is automatically configured to trigger ICE restart on both the local peer (once the local peer has been set) and on the remote peer, once the offer is sent across your signaling mechanism and the remote peer has set its description as well.
restartIce()
causes the
negotiationneeded
event to be fired on the
RTCPeerConnection
to inform the application that it should perform negotiation using its signaling channel.
If negotiation fails to complete—either due to rollback or because incoming offers are in the process of being negotiated—the
RTCPeerConnection
will remember that you requested ICE restart. The next time the connection's
signalingState
changes to
stable
, the connection will fire the
negotiationneeded
event. This process continues until an ICE restart has been successfully completed.
rtcPeerConnection.restartIce();
None.
undefined
.
After calling
restartIce()
, the next offer created using
createOffer()
will initiate ICE restart once sent to the remote peer over your signaling mechanism. Restarting ICE essentially resets ICE so that it creates all new candidates using new credentials. Existing media transmissions continue uninterrupted during this process.
For details about how ICE restart works, see ICE restart in Lifetime of a WebRTC session and RFC 5245, section 9.1.1.1: ICE specification .
This example creates a handler for the
iceconnectionstatechange
event that handles a transition to the
failed
state by restarting ICE in order to try again.
pc.addEventListener("iceconnectionstatechange", event => {
if (pc.iceConnectionState === "failed") {
/* possibly reconfigure the connection in some way here */
/* then request ICE restart */
pc.restartIce();
}
});
With this code in place, a transition to the
failed
state during ICE negotiation will cause a
negotiationneeded
event to be fired, in response to which your code should renegotiate as usual. However, because you have called
restartIce()
, your call to
createOffer()
which occurs in the handler for
negotiationneeded
will trigger an ICE restart rather than just a regular renegotiation.
| 规范 | 状态 | 注释 |
|---|---|---|
|
WebRTC 1.0: Real-time Communication Between Browsers
The definition of 'RTCPeerConnection.restartIce()' in that specification. |
候选推荐 | 初始定义。 |
| 桌面 | 移动 | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
restartIce()
方法
|
Chrome 77 | Edge 79 | Firefox 70 | IE No | Opera No | Safari No | WebView Android 77 | Chrome Android 77 | Firefox Android No | Opera Android 55 | Safari iOS No | Samsung Internet Android 12.0 |
完整支持
不支持
RTCPeerConnection
canTrickleIceCandidates
connectionState
currentLocalDescription
currentRemoteDescription
getDefaultIceServers()
iceConnectionState
iceGatheringState
localDescription
onaddstream
onconnectionstatechange
ondatachannel
onicecandidate
oniceconnectionstatechange
onicegatheringstatechange
onidentityresult
onidpassertionerror
onidpvalidationerror
onnegotiationneeded
onpeeridentity
onremovestream
onsignalingstatechange
ontrack
peerIdentity
pendingLocalDescription
pendingRemoteDescription
remoteDescription
sctp
signalingState
addIceCandidate()
addStream()
addTrack()
close()
createAnswer()
createDataChannel()
createOffer()
generateCertificate()
getConfiguration()
getIdentityAssertion()
getReceivers()
getSenders()
getStats()
getStreamById()
getTransceivers()
removeStream()
removeTrack()
restartIce()
setConfiguration()
setIdentityProvider()
setLocalDescription()
setRemoteDescription()