macOS Safari问题,(getUserMedia)以角度6从摄像机获取视频流-NotReadableError:I / O读取操作失败

时间:2018-09-12 14:30:15

标签: javascript angular macos safari getusermedia

当我尝试从mac的{​​{1}}中的摄像机获取视频流时,出现问题。
为了获得流,我使用函数safari
navigator.mediaDevices.getUserMedia({video: true})上可以很好地工作,但是在chrome上有时会抛出错误:

  

NotReadableError:I / O读取操作失败。

console error screen

最奇怪的是,它不是稳定的,它会出现错误,并且一段时间后可以正常工作(无需更改代码) ...我检查了很多次,但没有找到依赖的理由,不管它是成功还是失败。

另一个奇怪的事情是,错误仅以角度显示,因此我认为问题可能出在safari上,但是当我尝试取出要获取的函数调用时却找不到解决方案来自zone.js的流(用于从zonezone中提取的runOutsideAngular)。

我尝试使用一些run库,例如npmngx-webcam,但这也无济于事,当我的代码中显示错误时,它也出现在插件代码中(我猜是因为他们使用相同的func获取流)。

因此,我对互联网的长期研究未能得出适当的结果,我不得不询问建议,解决方案或至少是想法。

我的问题
如何避免出现此错误,为何不经常显示错误以及此错误的原因是什么?

感谢您的帮助。

4 个答案:

答案 0 :(得分:0)

与角度无关,只需运行即可:

navigator.mediaDevices.getUserMedia({audio: true, video: false}).then(function(e) {console.log("success",e);}, function(e){console.log("reject",e);})

在JavaScript控制台中,您将仅在Safari上看到I / O错误。这看起来像是WebKit的错误。

(我会在找到更多详细信息后立即完成答案)。

答案 1 :(得分:0)

它可能与zone.js(属于angular6的一部分)

有关

尝试打开polyfills.ts并添加

   // rtc peer connection patch
   import 'zone.js/dist/webapis-rtc-peer-connection';
   // getUserMedia patch
   import 'zone.js/dist/zone-patch-user-media.js';

之后

import 'zone.js/dist/zone'; 

示例here。但是,现在有时可以在我的应用程序中使用它。

答案 2 :(得分:0)

我在iOS Safari浏览器中遇到了同样的问题。 原因是其他网站正在使用我的相机。 只需关闭所有其他webrtc会话,然后再试一次,便可以使用。

答案 3 :(得分:0)

当我将属性 playinline 放在 html 标签视频中时有效:

<video autoplay playsinline class="input_video"></video>