浏览器里摄像头开启失败:failed to allocate videosource


通过程序在Web浏览器里调用摄像头,报错“NotReadableError: Failed to allocate videosource”的原因及解决办法。文末附Web调用摄像头的程序说明。

一开始在360浏览器里调用摄像头,报错“[object NavigatorUserMediaError]”,也没找到相关权限开关的设置!Web程序基本上是没问题的,因为此前成功开启过摄像头。想到可能权限的问题,欲换成在Firefox火狐浏览器运行程序并打开摄像头,错误提示“NotReadableError: Failed to allocate videosource”,百度了一下在stackoverflow找到了答案(英文):

NotReadableError: Failed to allocate videosource

Most commonly this happens on Windows because the webcam is already in use by another app. Firefox will throw this error on both
Windows and Mac even though only on Windows processes get exclusive access to the webcam.

翻译:最常见的是在Windows上发生,因为网络摄像头已经被另一个应用程序使用。Firefox会在Windows和Mac上抛出这个错误,即使只有在Windows进程中对网络摄像头进行独占访问。

Please make sure your camera is not been used by some other application (chrome, ie or any other browser). I wasted have of my day
searching for a solution, and in the end, found out my camera was used by other application…

翻译:请确保您的相机没有被其他应用程序使用(Chrome,即任何其他浏览器)。我浪费了一天的时间寻找一个解决方案,最后,发现我的相机被其他应用程序使用…

The error can happen for other reasons:
Although the user granted permission to use the matching devices, a hardware error occurred at the operating system, browser, or
Web page level which prevented access to the device.

翻译:由于其他原因,错误可能发生:尽管用户授予了使用匹配设备的权限,但是在操作系统、浏览器或网页级别上发生了硬件错误,从而阻止了对设备的访问。

综合以上,原因是摄像头被其它应用占用了,比如通过“我的电脑”面板直接运行了摄像头软件,只要关闭相关应用软件或结束进程即可。

应用场景说明

在软件里(基于火狐浏览器)远程审方,需通过高拍仪扫描处方。

高拍仪:failed to allocate videosource

高拍仪:failed to allocate videosource

火狐浏览器里对摄像头、麦克风的开启给出安全提醒

火狐浏览器里对摄像头、麦克风的开启给出安全提醒

浏览器里成功开启摄像头

浏览器里成功开启摄像头


相关技术API(参考MDN技术文档)

navigator.getUserMedia()

语法:
navigator.getUserMedia ( constraints, successCallback, errorCallback );

参数:

  • constraints
    MediaStreamConstaints对象指定了请求使用媒体的类型,还有每个类型的所需要的参数。具体细节请参见MediaDevices.getUserMedia() 方法下面的constraints部分。
  • successCallback
    当调用成功后,successCallback中指定的函数就被调用,包含了媒体流的MediaStream对象作为它的参数,你可以把媒体流对象赋值给合适的元素,然后使用它,就像下面的例子一样:
    function(stream) {
       var video = document.querySelector('video');
       video.src = window.URL.createObjectURL(stream);
       video.onloadedmetadata = function(e) {
          // Do something with the video here.
       };
    }
  • errorCallback
    当调用失败,errorCallback中指定的函数就会被调用,MediaStreamError对象作为它唯一的参数;此对象基于DOMException对象构建。错误码描述见参见以下:
    PermissionDeniedError: 使用媒体设备请求被用户或者系统拒绝
    NotFoundError:找不到constraints中指定媒体类型

该特性已经从 Web 标准中删除,虽然一些浏览器目前仍然支持它,但也许会在未来的某个时间停止支持,请尽量不要使用该特性。
此API已更名为 MediaDevices.getUserMedia(),这个已废弃的API版本仅为了向后兼容而存在。新代码应当使用Navigator.mediaDevices.getUserMedia() 替代.

未经允许不得转载:久久经验网 » 浏览器里摄像头开启失败:failed to allocate videosource

赞 (0)

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址