【问题标题】:Trouble with navigator.mediaDevices.getUserMedia with chrome on iPhone XiPhone X 上带有 chrome 的 navigator.mediaDevices.getUserMedia 出现问题
【发布时间】:2023-04-08 19:36:01
【问题描述】:

我正在尝试让我的浏览器访问我的设备摄像头,以便我可以将媒体流输入到视频中,但是当我在 google chrome 上测试时 getUserMedia 不受支持,但是当我使用 safari 时我没有问题。

谷歌浏览器不再支持 getUserMedia 了吗?

我已经阅读了this article,但没有运气。

这是我目前正在使用的实现:

navigator.getUserMedia = navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia;

    let constraints = {
      audio: false,
      video: { facingMode: "user" }
    }

    if (navigator.getUserMedia) {
      navigator.getUserMedia(constraints,
         function(stream) {
            var video = document.querySelector('video');
            video.srcObject = stream;
            video.onloadedmetadata = function(e) {
              video.play();
            };
         },
         function(err) {
            alert("The following error occured: " + err.name);
         }
      );
   } else {
      console.log("getUserMedia not supported");
   }

【问题讨论】:

    标签: javascript ios google-chrome webcam getusermedia


    【解决方案1】:

    在 iOS 11.2x 上遇到同样的问题。我的研究表明,FF 和 Chrome 在 OS 上受支持,但在 iOS 上不受支持,即使它们能够支持媒体设备。您可以测试简单的 mediaDevice 可用性:

                if (navigator.mediaDevices) {
                alert ("Media device supported");
            }
            else {
                alert ("Media device not supported");
            }
    

    你也可以在这里查看:HTML5Test

    iOS 上的 FF 和 Chrome 将显示“不支持媒体设备”,而 Safari 则表示支持。原因看起来苹果仍然没有免费使用 mediaDevices 访问其他浏览器。您可以想象其中的一些原因。 ;/ 所以这次不要责怪 Chrome 或 Firefox。

    想知道它现在是否适用于 iOS 12。

    【讨论】:

    • 2020 年 9 月,Chrome 84.0.4147.71 操作系统:iOS 仍然无法运行
    【解决方案2】:

    这适用于桌面和手机上的 FF 和 Chrome。注意:桌面和手机上的宽度和高度是相反的。注意:FF 和 Chrome 允许它在 localhost 和 https 上运行。 Chrome 不允许它在 http 站点上运行。

    function fnStreamVideo(){
        navigator.mediaDevices.getUserMedia({ video:true })
        .then(function(stream) {
            let video = document.getElementById('video');
            video.srcObject = stream;
            video.onloadedmetadata = function(e) {
                video.play();
                video.width=480;
                video.height=320;
            };
        })
        .catch(function(e){});
    }
    

    【讨论】:

    • 这似乎不适用于 Chrome IOS。打开下面的fiddle就可以看到alertjsfiddle.net/ten6hc2x/4
    • @ben 为什么投反对票?链接的代码不起作用。我的作品,在 FF,Chrome,Safari,桌面和移动。请充分解释。 (袖手旁观的 cmets 和 arb downvotes 正是我不喜欢评论 stackoverflow 的原因。)
    • jsfiddle 上的代码与您共享的代码相同(警报除外)。它不起作用,因为mediaDevicesundefined,就像@Jonny 在他的回答中所说的那样。这是iOS的特殊性。在 Android 上,您的代码可以工作。但是,这个问题专门针对 iPhone X(所以是 iOS)
    • 没有本。我仍在实时站点上使用此代码,它仍然有效。
    • @MannyC 你不正确。正如@ben 所说,mediaDevices 在 Chrome for iOS 上是 undefined。由于 Apple 的限制,它适用于 iOS 上的 Safari,但不适用于任何其他浏览器。我怀疑您的“有效的实时网站”已经严重损坏。
    猜你喜欢
    • 1970-01-01
    • 2011-01-27
    • 2011-01-16
    • 2020-03-18
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 1970-01-01
    相关资源
    最近更新 更多