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

rn0zuynd  于 2022-12-06  发布在  Go
关注(0)|答案(3)|浏览(421)

我正在尝试创建一个视频会议网络应用程序。
问题是我试图禁用我的相机在中间会议,它的工作,但我的笔记本电脑相机指示灯仍然亮着(灯是亮着的),但在我的网络,视频显示空白屏幕,这是正常的或我错过了什么?
这是我尝试

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
}
efzxgjgh

efzxgjgh1#

还有一个stop()方法,它应该可以在Chrome和Safari中实现。Firefox应该已经通过设置enabled属性将相机标记为未使用。

this.myStream.getVideoTracks()[0].stop();
yqhsw0fo

yqhsw0fo2#

首先,MediaStreamTrack.enabled是一个布尔值,因此您可以简单地指定值false
若要简化程式码,您可以呼叫:

var vidTrack = myStream.getVideoTracks();
vidTrack.forEach(track => track.enabled = false);

MediaStreamTrack.enabled = false时,轨道将空帧传递到流中,这就是为什么发送黑色视频的原因。摄像头/源本身没有停止--我相信Mac设备上的摄像头灯会关闭,但Windows等设备上可能不会。
另一方面,.stop()会完全停止音轨,并告诉源不再需要它。如果源只连接到这个音轨,源本身会完全停止。调用.stop()肯定会关闭摄像头和摄像头灯,但你将无法在流示例中重新打开它(因为它的视频轨道被破坏了).因此,完全关闭摄像头并不是你想做的;只要坚持使用.enabled = false来暂时禁用视频,使用.enabled = true来重新打开它。

p5cysglq

p5cysglq3#

我们需要在navigator.mediaDevices. getUserMedia方法中分配window.localStream = stream;
用于停止网络摄像头和LED指示灯关闭。
localStream.getVideoTracks()[0].stop();
video.src = '';

相关问题