使用navigator.mediaDevices.getUserMedia时发生TypeError

时间:2019-02-05 10:02:19

标签: javascript node.js webrtc mediadevices

我试图用navigator.getUserMedia代替不推荐使用的navigator.mediaDevices.getUserMedia,但是在尝试时出现此错误:

  

TypeError:无法设置未定义的属性'localStream'

这是我的HTML:

   <video ref="videoPlayer" hide.bind="screenSharing" id="videoPlayer" autoplay muted></video>

我正在使用Aurelia Environment,而我的JavaScript是这样的:

attached() {

 if (!this.localStream) {
  this.getLocalMedia();
 }
}    

getLocalMedia() {
 let constraints: MediaStreamConstraints = {
   video: true,
   audio: true
 };

navigator.mediaDevices.getUserMedia(constraints)
  .then(function (stream) {
    console.log('Got mic+video stream', stream);
    this.localStream = stream;
    this.videoPlayer.srcObject = this.localStream;
    this.videoPlayer.srcObject = stream;
   })
   .catch (function (err) {
     console.error(err);
 });
// navigator.getUserMedia(constraints, (stream) => {
//   console.log('Got mic+video stream', stream);
//   this.localStream = stream;
//   this.videoPlayer.srcObject = this.localStream;
// },
//   (err) => {
//     console.error(err);
//   }
// );

  }

有人可以想象是什么问题?我正在使用Electron创建一个应用。

我在互联网上也看到了类似的问题,所以我打印了流:

Got mic+video stream 
MediaStream {id: "EIGkOQeyfsaRpweVgRG8eQiZfiuJ2HV3QZqW", active: true,     onaddtrack: null, onremovetrack: null, onactive: null…}
active: true
id: "EIGkOQeyfsaRpweVgRG8eQiZfiuJ2HV3QZqW"
onactive: null
onaddtrack: null
oninactive: null
onremovetrack: null
__proto__: MediaStream

我也尝试在文档准备好后添加一个EventListener,但是我仍然遇到这个问题。如果我将已注释的部分与已弃用的navigator.getUserMedia一起使用,则一切正常

1 个答案:

答案 0 :(得分:1)

您在旧的navigator.getUserMedia中使用了箭头功能,但在navigator.mediaDevices.getUserMedia中使用了经典功能。由于Andreas saidthis并不是您想的那样,因此这些样式之间的行为是不同的。