navigator.getUserMedia 函数未定义

navigator.getUserMedia function is undefined

Navigator.getUserMedia()

navigator.getUserMedia函数是否可以因为未授予摄像头或麦克风访问权限而未定义?

来自documentation

This is a legacy method. Please use the newer navigator.mediaDevices.getUserMedia() instead.

例如:

async function getMedia(constraints) {
  let stream = null;

  try {
    stream = await navigator.mediaDevices.getUserMedia(constraints);
    console.log('1')
    /* use the stream */
  } catch (err) {
    /* handle the error */
  }
}

getMedia({audio: true, video: true})

来源:MediaDevices 文档。

首先, 确保使用 navigator.mediaDevices.getUserMedia() 而不是 navigator.getUserMedia()。后者已弃用。

其次, 在 Chrome 上抓取 navigator.mediaDevices.getUserMedia() 需要 安全上下文
如果服务器是基于 js 的,那么您需要使用 https 来访问主页(例如 index.html ) 而不是 http。 https 连接需要 creating/using 凭据(即证书和私钥)。为了演示,给出以下代码:

// change key and cert if you have other ones you use with a different name
var fs = require('fs');
var https = require('https');
var privateKey  = fs.readFileSync('webrtcwwsocket-key.pem', 'utf8');
var certificate = fs.readFileSync('webrtcwwsocket-cert.pem', 'utf8');
var credentials = {key: privateKey, cert: certificate};
const express = require('express')
const app = express()
const httpsServer = https.createServer(credentials, app)

如果您使用的是基于python的服务器,那么您需要按如下方式创建ssl上下文:

ssl_context = ssl.SSLContext()
ssl_context.load_cert_chain(cert_file_path, key_file_path)