首页 > 解决方案 > Android/Ionic 上 navigator.mediaDevices.getUserMedia 的 DOMException

问题描述

我正在尝试通过手机摄像头并使用 WebRTC 流式传输视频元素。我这样做如下(片段):

    <video id="yourVideo" autoplay muted playsinline></video>

    var yourVideo = document.getElementById("yourVideo");
    // ...

    navigator.mediaDevices.getUserMedia({audio:false, video:true}).
    then(function(stream){
        console.log(stream)
        yourVideo.srcObject = stream
        pc.addStream(stream)
    })
    .catch(function(error){
        console.log(error)
    })

这在浏览器中工作正常,我的视频/相机会显示出来。但是,在电话上它返回错误 DOMException。我找不到任何可以解释这一点的信息。

Running it Ionic V1.X
ionic cordova run android

当我运行 navigator.mediaDevices 这就是我所看到的:

在此处输入图像描述

可能与许可有关吗?如果是这样,我该如何解决这个问题?

标签: androidcordovaionic-frameworkwebrtccordova-plugins

解决方案


您必须先获取设备源,然后尝试获取流,尝试这种方式

var videoElement = document.getElementById("yourVideo");
var videoSrc = undefined;

navigator.mediaDevices.enumerateDevices()
  .then(getDevices).then(getStream).catch(handleError);

function getDevices(deviceInfos) {
  for (var i = 0; i !== deviceInfos.length; ++i) {
    var deviceInfo = deviceInfos[i];
    if (deviceInfo.kind === 'videoinput') {
      videoSrc = deviceInfo.deviceId;
      break;
    }
  }
}

function getStream() {    
  navigator.mediaDevices.getUserMedia({
    video: {
      deviceId: {
        exact: videoSrc
      }
    }
  }).
  then(gotStream).catch(handleError);
}

function gotStream(stream) {
  videoElement.srcObject = stream;
}

function handleError(error) {
  console.log('Error: ', error);
}

推荐阅读