Javascript Safari-MediaStreamTrack由于捕获失败而结束

Javascript Safari-MediaStreamTrack由于捕获失败而结束,javascript,safari,webrtc,getusermedia,Javascript,Safari,Webrtc,Getusermedia,今天我升级到macOS Big Sur 11.0.1和Safari 14,我的网站(基于WebRTC的一对一视频聊天)停止了Safari的工作。视频通话10秒后,出现以下控制台错误:“MediaStreamTrack因捕获失败而结束”,另一个人无法再看到视频 我的代码如下所示: const userMedia = await navigator.mediaDevices.getUserMedia({ video: true, audio: true, }); if (userM

今天我升级到macOS Big Sur 11.0.1和Safari 14,我的网站(基于WebRTC的一对一视频聊天)停止了Safari的工作。视频通话10秒后,出现以下控制台错误:“MediaStreamTrack因捕获失败而结束”,另一个人无法再看到视频

我的代码如下所示:

const userMedia = await navigator.mediaDevices.getUserMedia({
    video: true,
    audio: true,
});

if (userMedia != null) {
    userMedia.getTracks().forEach((track) => {
      otherRtcPeer.addTrack(track, userMedia);
    });
}

这是Safari bug还是实现问题?如何解决这个问题?

我可以通过将我用作webGL纹理的视频元素设置为display:block,opacity:0(而不是display:none)来解决这个问题

也许他们取消了在ios14/big sur上播放屏幕外视频纹理的功能。

在经历了这些之后,我做了一些更改并解决了这个问题

  • 使流对象处于反应状态
  • 当视频元素渲染/重新渲染时,流对象被克隆并指定给视频元素对象
  • 捕获图片后,停止流中的所有媒体曲目

  • 上述错误已经被克服。

    似乎其他人也遇到了这个问题,看起来像是Safari的bug:-你知道任何解决方法吗?是的,我自己也有问题,而且它似乎不会触发“统一”,以便轨道至少能够知道。苹果是新的Internet Explorer…我还发现,在本地环境中不可能重现此问题。在我们的情况下,我们将视频元素分离并重新嵌入DOM,不知何故,这导致了问题。我不知道为什么。现在,我们使用了一个始终存在的视频元素,并根据需要重新附加到它上。任何关于这个问题的更新,我也遇到了同样的问题。我们使用html5视频元素来捕获图像。在拍摄了一些照片之后,突然在流程的中间,它也陷入了同样的错误。我试图了解我们的实现是否必须有机会使用iOS/safari更新。这与此bug无关。