如何在 WebRTC 中检测冻结的视频流

How to detect a frozen video stream in WebRTC

不幸的是,在使用 react-native-webrtc 进行一对一视频通话时,两个视频流之一会冻结或变黑。有没有办法检测何时以编程方式发生这种情况?提前致谢!

看起来每个视频轨道都有一个侦听器,一旦流冻结就会触发。

在 React Native 中它是 onmute 监听器:

stream.getVideoTracks().forEach(videoTrack => {
    videoTrack.onmute = () => {
        console.log("Frozen video stream detected!");
    };
});

请注意,在 React Native 中使用此方法检测冻结流似乎仅适用于远程轨道!

为了检测流当前是否被冻结,我在视频轨道上使用 muted 属性:

console.log(videoTrack.muted); // true when frozen

另一种我发现但没有进一步探索的方法是 RTCPeerConnection 上的 getStats() 方法。它 returns 具有大量数据的承诺,可用于检测冻结的视频流,我想还有更多。