getUserMedia 在网站上工作但不在移动设备上工作

getUserMedia working on website but not working on mobile

我正在使用 getusermedia 在我的网站上录制音频。我包括了 getusermedia 的 javascript。录制功能在网站上可以正常使用,但在手机上打开时甚至没有弹出权限。

var constraints = {
  audio: true,
  video: false
}
navigator.mediaDevices.getUserMedia(constraints).then(function(stream) {
  permissiongiven = 1;
});

这是提示我获得许可但不适用于移动设备的示例代码。 我怎样才能让它在两个设备上工作。任何帮助表示赞赏。 谢谢

编辑:- 该代码现在在移动设备上也能正常工作。也许它是通过 chrome 更新或网站的安全证书解决的。感谢大家的帮助。

我发现这个网站对回答这个问题很有用

https://caniuse.com/#search=getusermedia

它说 getUserMedia 仅从 Chrome 支持 Android 版本 70(2018 年 10 月 16 日发布)

检查MDN, then make sure your browser supports it. You need Chrome for Android 52+ it says. FWIW 68 works for me

您还应该进行功能检查并发现错误:

if (!navigator.mediaDevices) {
  console.log("Sorry, getUserMedia is not supported");
  return;
}

navigator.mediaDevices.getUserMedia(constraints)
.then(stream => permissiongiven = 1)
.catch(error => console.log(error));

根据您遇到的错误,我们可能会了解更多信息。

  • NotFoundError 表示设备上未检测到摄像头或麦克风。
  • NotAllowedError 表示未授予用户权限,或者您在 iframe 中或不是 https。

navigator.mediaDevices.getUserMedia 浏览器兼容性

我不知道 navigator.getUserMedia 已被弃用(至少对于三星而言,这是我正在测试的),我发现 this article on web audio 有一个我几乎没有修改的代码示例:

function initGetUserMedia() {
  navigator.mediaDevices = navigator.mediaDevices || {}
  navigator.mediaDevices.getUserMedia = navigator.mediaDevices.getUserMedia || function(constraints) {
    let getUserMedia = navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
    if (!getUserMedia) {
      return Promise.reject(new Error('getUserMedia not supported by this browser'));
    } else {
      return new Promise((resolve, reject) => {
        getUserMedia.call(navigator, constraints, resolve, reject);
      });
    }
  }
}

请注意,在移动设备上,您必须使用 SSL 才能使用 getUserMedia()。检查您是否使用 http:// 前缀访问您的网站。尝试将其更改为 https://,它应该可以正常工作。

使用 ssl 站点尝试此代码:

<script>var constraints = {audio: true, video: false}
    navigator.mediaDevices.getUserMedia(constraints).then(function(stream) {{permissiongiven = 1;});</script>