我們正在使用WebRTC開發從移動設備到計算機的視頻流。移動設備可能完全失去連接,計算機應能夠檢測到該連接。現在,視頻只是凍結。但在這種情況下,都不會調用EventHandler
s of RTCPeerConnection
。在WebRTC連接中檢測離線對等體
- 那麼在另一個對等體上如何檢測到這種連接失敗?
- 對端如何首先檢測連接建立的連接問題?
我們正在使用WebRTC開發從移動設備到計算機的視頻流。移動設備可能完全失去連接,計算機應能夠檢測到該連接。現在,視頻只是凍結。但在這種情況下,都不會調用EventHandler
s of RTCPeerConnection
。在WebRTC連接中檢測離線對等體
iceconnectionstatechange處理程序應該在沒有從對等端接收數據(在Chrome中; Firefox正在處理該對象)約5-10秒後觸發。一個例子見https://webrtc.github.io/samples/src/content/peerconnection/states/。
如火狐一種解決方法,您可以使用getStats
,以檢測數據包停止在未來:
var findStat = (m, type) => [...m.values()].find(s => s.type == type && !s.isRemote);
var hasConnected = new Promise(resolve => pc.oniceconnectionstatechange =
e => pc.iceConnectionState == "connected" && resolve());
var hasDropped = hasConnected.then(() => new Promise(resolve => {
var lastPackets = countdown = 0, timeout = 3; // seconds
var iv = setInterval(() => pc.getStats().then(stats => {
var packets = findStat(stats, "inbound-rtp").packetsReceived;
countdown = (packets - lastPackets)? timeout : countdown - 1;
if (!countdown) resolve(clearInterval(iv));
lastPackets = packets;
}), 1000);
}));
這裏有一個演示:https://jsfiddle.net/4rzhe7n8/
謝謝。你對Firefox的看法是對的。在Chrome中,大約5秒後'oniceconnectionstatechange'被調用'currentTarget.iceConnectionState =='disconnected'',並且在5秒之後,相同的處理器被調用'currentTarget.iceConnectionState =='failed''。 – str
回覆下面@MartinŽdila的評論,這也適用於Firefox。 – jib