当我尝试从mac
的{{1}}中的摄像机获取视频流时,出现问题。
为了获得流,我使用函数safari
在navigator.mediaDevices.getUserMedia({video: true})
上可以很好地工作,但是在chrome
上有时会抛出错误:
NotReadableError:I / O读取操作失败。
最奇怪的是,它不是稳定的,它会出现错误,并且一段时间后可以正常工作(无需更改代码) ...我检查了很多次,但没有找到依赖的理由,不管它是成功还是失败。
另一个奇怪的事情是,错误仅以角度显示,因此我认为问题可能出在safari
上,但是当我尝试取出要获取的函数调用时却找不到解决方案来自zone.js
的流(用于从zone
和zone
中提取的runOutsideAngular
)。
我尝试使用一些run
库,例如npm
,ngx-webcam
,但这也无济于事,当我的代码中显示错误时,它也出现在插件代码中(我猜是因为他们使用相同的func获取流)。
因此,我对互联网的长期研究未能得出适当的结果,我不得不询问建议,解决方案或至少是想法。
我的问题
如何避免出现此错误,为何不经常显示错误以及此错误的原因是什么?
感谢您的帮助。
答案 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>