如何在mediastream javascript上完全关闭摄像头

如何在mediastream javascript上完全关闭摄像头,javascript,google-chrome,webrtc,peerjs,Javascript,Google Chrome,Webrtc,Peerjs,我正在尝试创建一个视频会议web应用程序 问题是我试图在中间会议上禁用我的相机,它可以工作,但我的笔记本电脑相机指示灯仍然亮着(灯亮着),但在我的网络上,视频显示空白屏幕,这是正常的还是我错过了什么 这是我想要的 videoAction() { navigator.mediaDevices.getUserMedia({ video: true, audio: true }).then(stream => { this.myStream = stream

我正在尝试创建一个视频会议web应用程序

问题是我试图在中间会议上禁用我的相机,它可以工作,但我的笔记本电脑相机指示灯仍然亮着(灯亮着),但在我的网络上,视频显示空白屏幕,这是正常的还是我错过了什么

这是我想要的

videoAction() {
  navigator.mediaDevices.getUserMedia({
    video: true,
    audio: true
  }).then(stream => {
     this.myStream = stream
  })

  this.myStream.getVideoTracks()[0].enabled = !(this.myStream.getVideoTracks()[0].enabled)
  this.mediaStatus.video = this.myStream.getVideoTracks()[0].enabled
}
还有一种方法可以在Chrome和Safari中实现这一点。Firefox应该已经通过设置
enabled
属性将摄像头标记为未使用

this.myStream.getVideoTracks()[0].stop();
还有一种方法可以在Chrome和Safari中实现这一点。Firefox应该已经通过设置
enabled
属性将摄像头标记为未使用

this.myStream.getVideoTracks()[0].stop();
首先,是一个布尔值,因此您可以简单地分配值
false

要简化代码,可以调用:

var vidTrack = myStream.getVideoTracks();
vidTrack.forEach(track => track.enabled = false);
MediaStreamTrack.enabled=false
时,曲目将空帧传递给流,这就是发送黑色视频的原因。摄像头/光源本身并没有停止——我相信网络摄像头的灯在Mac设备上会熄灭,但在Windows等设备上可能不会

另一方面,
.stop()
会完全停止曲目,并告诉源不再需要它。如果震源仅连接到此轨迹,震源本身将完全停止。调用
.stop()
肯定会关闭摄像头和网络摄像头指示灯,但您无法在流实例中重新打开它(因为它的视频轨迹已被破坏)。因此,完全关闭相机不是你想做的;只需按
.enabled=false
暂时禁用视频,然后按
.enabled=true
将其重新打开即可。

首先,它是一个布尔值,因此您可以简单地分配值
false

要简化代码,可以调用:

var vidTrack = myStream.getVideoTracks();
vidTrack.forEach(track => track.enabled = false);
MediaStreamTrack.enabled=false
时,曲目将空帧传递给流,这就是发送黑色视频的原因。摄像头/光源本身并没有停止——我相信网络摄像头的灯在Mac设备上会熄灭,但在Windows等设备上可能不会


另一方面,
.stop()
会完全停止曲目,并告诉源不再需要它。如果震源仅连接到此轨迹,震源本身将完全停止。调用
.stop()
肯定会关闭摄像头和网络摄像头指示灯,但您无法在流实例中重新打开它(因为它的视频轨迹已被破坏)。因此,完全关闭相机不是你想做的;只需按
.enabled=false
暂时禁用视频,按
.enabled=true
重新打开视频。

这可能取决于网络摄像头驱动程序。这可能是因为,如果某个程序能够切换摄像机的可见性,摄像机的灯光就会亮起。你试过其他摄像头吗?没有试过,但当我关闭标签时,灯会熄灭,所以我认为驱动程序没有问题。这可能归结为网络摄像头驱动程序。这可能是因为,如果某个程序能够切换摄像机的可见性,摄像机的灯光就会亮起。你试过其他摄像头吗?没有试过,但当我关闭选项卡时,指示灯会熄灭,因此我认为驱动程序没有问题。.这是工作,但我无法使用
this.myStream.getVideoTracks()[0].start()重新启用它不,那是不可能的。但在需要此解决方法的Chrome和Safari中,可以再次调用
getUserMedia()
,而无需触发另一个用户提示。这是正常工作,但我无法使用
this.myStream.getVideoTracks()[0].start()重新启用它不,那是不可能的。但在需要这种解决方法的Chrome和Safari中,可以再次调用
getUserMedia()
,而无需触发另一个用户提示。