【问题标题】:JS, navigator.mediaDevices.getUserMedia() not workingJS,navigator.mediaDevices.getUserMedia() 不工作
【发布时间】:2021-06-30 21:36:54
【问题描述】:

我正在尝试从客户的网络摄像头获取视频。我写了代码,没有出现错误。但是,当我尝试获取视频时,什么都没有显示(在 Google Chrome 中)或只显示视频的一帧(在 Mozilla Firefox 中)。我之前测试过,它工作得很好,但现在,我不知道为什么,它不起作用。我搜索了它,并没有发现任何关于它的信息。非常感谢任何帮助。谢谢

这是我的代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
    html, body {
        height: 100%;
    }
    body {
        margin: 0;
    }
    video {
        width: 100%;
        height: 100%;
        position: absolute;
        left: 0;
        top: 0;
        z-index: -1;
    }
    </style>
</head>
<body>
    <button id="shareBtn">Share Video</button>

    <script>
    async function startCapture(displayMediaOptions) {
        let stream = null;

        try {
            stream = await navigator.mediaDevices.getUserMedia(displayMediaOptions);
            video = document.createElement("video");
            video.srcObject = stream;
            document.body.appendChild(video);
        } catch(err) {
            console.error(err);
        }
    }
    document.getElementById("shareBtn").addEventListener("click", () => {

        startCapture({ video:true });

    });
    </script>
</body>
</html>

【问题讨论】:

  • 您是否必须先显示托管权限弹出窗口才能从网络摄像头抓取视频?
  • 您的代码正在运行。也许您阻止浏览器访问相机。
  • 第一次弹出一个请求我允许的框,我允许了,@Pieterjan。
  • 我正在使用本地 FQDN(域)。但是,我仅使用localhost 或 IP 地址对其进行了测试,但也没有用,而且我很确定我已经授予它访问权限,@NikitaTSB。

标签: javascript html css getusermedia


【解决方案1】:

您的代码正在运行,但视频已暂停。 在您的代码中添加 1 行:

<script>
    async function startCapture(displayMediaOptions) {
        let stream = null;

        try {
            stream = await navigator.mediaDevices.getUserMedia(displayMediaOptions);
            video = document.createElement("video");
            video.srcObject = stream;
            video.setAttribute('autoplay', true); /* THIS */
            document.body.appendChild(video);
        } catch(err) {
            console.error(err);
        }
    }
    document.getElementById("shareBtn").addEventListener("click", () => {

        startCapture({ video:true });

    });
</script>

【讨论】:

  • 谢谢!那行得通!上次我这样做时,我在元素中添加了autoplay,但这次我没有。再次感谢您!
猜你喜欢
  • 2016-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-15
  • 2018-12-16
  • 2016-08-11
  • 1970-01-01
相关资源
最近更新 更多