我们正在使用WebRTC开发从移动设备到计算机的视频流.移动设备可能完全失去连接,计算机应该能够检测到它.现在,视频就冻结了.但是,无论是的EventHandler
第RTCPeerConnection
被称为在这样的情况.
iceconnectionstatechange处理程序应该在大约5-10秒之后不再从对等方接收数据时触发(在Chrome中; Firefox目前正在进行处理).有关示例,请参阅https://webrtc.github.io/samples/src/content/peerconnection/states/.
作为Firefox中的一种解决方法,您可以使用它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);
}));
Run Code Online (Sandbox Code Playgroud)
这是一个演示:https://jsfiddle.net/4rzhe7n8/
归档时间: |
|
查看次数: |
2641 次 |
最近记录: |