NotReadableError:无法分配视频源

时间:2017-03-03 00:27:19

标签: javascript html5 getusermedia

当我尝试执行以下代码并选择笔记本电脑的相机时,我在Firefox 51中出现此错误:

navigator.getMedia = (navigator.getUserMedia ||
  navigator.webkitGetUserMedia ||
  navigator.mediaDevices.getUserMedia ||
  navigator.msGetUserMedia);

navigator.getMedia({
    video: true,
    audio: false
  },
  function(stream) {
    if (navigator.mozGetUserMedia) {
      video.mozSrcObject = stream;
    } else {
      var vendorURL = window.URL || window.webkitURL;
      video.src = vendorURL.createObjectURL(stream);
    }
    video.play();
  },
  function(err) {
    console.log("An error occured! " + err);
  }
);

错误:

NotReadableError: Failed to allocate videosource

有人可以详细说明这意味着什么吗?我的网络摄像头坏了吗?我昨天在剧本中使用它没有问题。它没有分配给其他应用程序。

9 个答案:

答案 0 :(得分:16)

NotReadableError是允许网络摄像头访问时Firefox引发的符合规范的错误,但不可能。

最常见的情况发生在Windows上,因为网络摄像头已被其他应用程序使用。 Firefox会在Windows和Mac上抛出此错误,即使只有Windows进程才能获得对网络摄像头的独占访问权限。

错误可能由于其他原因而发生:

  

虽然用户已授予使用匹配设备的权限,但操作系统,浏览器或网页级别发生硬件错误,导致无法访问设备。

Chrome会引发TrackStartError。它也会引发other reasons。 Chrome标签页可以共享同一设备。

来源:common getUserMedia() errors

答案 1 :(得分:4)

请确保您的相机未被其他应用程序(Chrome,即任何其他浏览器)使用。 我浪费了一天寻找解决方案,最后发现我的相机被其他应用程序使用了......

答案 2 :(得分:1)

这个问题还有一个解决方案。我的相机无法在 Firefox 和 Skype 中使用,但可以使用相机应用。

解决方案是为“经典应用程序”提供对相机的访问权限(我不知道它在英语中如何称呼)。它在同一个地方可以为所有其他应用程序提供或获取访问权限,只需在它们下面确保也允许经典应用程序。不仅仅是为有问题的应用程序提供支持,例如 Firefox,所有经典应用程序都需要启用该功能

答案 3 :(得分:0)

  

有人可以详细说明这是什么意思吗?我的网络摄像头坏了吗?我用了   从脚本到昨天才没有问题。没有分配给   其他应用程序。

我遇到了完全相同的问题!

对我感到羞耻!因为与此同时,我添加了一个https://blogs.msdn.microsoft.com/devops/2018/01/30/mstest-v2-in-assembly-parallel-test-execution/事件,包括beforeunload中报告的event.preventDefault

删除此event.preventDefault后,一切正常-符合预期。

答案 4 :(得分:0)

我在Windows 10上遇到了相同的问题,没有其他应用在使用我的视频设备。问题在于,在Windows 10的“设置”->“应用程序权限”(在左列中)中,需要打开麦克风和摄像头的设置(允许应用程序访问您的麦克风/摄像头)。没关系,您不会在此设置下方的应用列表中找到您的浏览器,只需在此处启用它,瞧。

答案 5 :(得分:0)

显示的消息getUserMedia() error: NotReadableError用于Chromium,但不显示Firefox Web浏览器。我还注意到,在Chromium中使用getUserMedia功能且没有麦克风访问功能的WebRTC示例正常工作。

实际上,我必须确保启用了麦克风,然后在Chromium / Chrome设置中选择正确的麦克风。然后,具有音频和视频访问权限的WebRTC可以正常工作。

如果不是麦克风问题,也可能是网络摄像头问题,因此您必须确保在Chromium / Chrome设置中启用并正确选择了网络摄像头。

请注意,一次只能有一个应用程序可以使用网络摄像头/麦克风。

答案 6 :(得分:0)

如果您是2019年12月之后或2019年12月在这里,我想告诉您几件事

  1. 此功能navigator.getUserMedia()已过时。
  2. 浏览器中此功能的后继产品为window.navigator.mediaDevices.getUserMedia
  3. 该新功能可能在许多浏览器中均不支持,因为几天前chrome仍在实验模式下,chrome发布了chrome 79,但对我来说仍不支持chrome 79,除了chrome和IE以外,它在所有版本中均能正常工作我的浏览器
  4. 这是一个快速代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Jello</title>
    <style>
        video{
            width: 30%;
            height: auto;
        }
    </style>
</head>
<body>
    <video autoplay controls></video>
    <button>Open Cam</button>
    <script>
    function getCam(){
        window.navigator.mediaDevices.getUserMedia({video:true}).then((stream)=>{
            // let videoTrack = stream.getVideoTracks()[0];
            // console.log(videoTrack);
            document.querySelector("video").srcObject = stream;
        }).catch(err=> console.log(err.name))
    }
    // getCam();
    document.querySelector("button").addEventListener("click", getCam);
    </script>
</body>
</html>

答案 7 :(得分:0)

我到处搜索了解决方案,最后发现了这一点。基本上,在我的情况下,摄像头权限已打开,Mozilla firefox可以访问网络摄像头,但chrome无法访问。像74.x这样的旧版chrome可以使用网络摄像头,但最新的84.x则不能。我以为问题出在铬上,但最后,我尝试从Windows 10设置打开麦克风访问权限。 chrome现在也可以访问网络摄像头。

解决方案:请检查是否已通过Windows设置打开了摄像头和麦克风访问权限。

答案 8 :(得分:0)

如果摄像头变化太快,也会在会话期间抛出 NonReadableError:无法启动视频源(不仅仅是本地!)。

我还不知道解决方案,但一旦我得到它,我会相应地编辑我的帖子。