我正在尝试创建一个视频会议网络应用程序。
问题是我试图禁用我的相机在中间会议,它的工作,但我的笔记本电脑相机指示灯仍然亮着(灯是亮着的),但在我的网络,视频显示空白屏幕,这是正常的或我错过了什么?
这是我尝试
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
}
3条答案
按热度按时间efzxgjgh1#
还有一个
stop()
方法,它应该可以在Chrome和Safari中实现。Firefox应该已经通过设置enabled
属性将相机标记为未使用。yqhsw0fo2#
首先,MediaStreamTrack.enabled是一个布尔值,因此您可以简单地指定值
false
。若要简化程式码,您可以呼叫:
当
MediaStreamTrack.enabled = false
时,轨道将空帧传递到流中,这就是为什么发送黑色视频的原因。摄像头/源本身没有停止--我相信Mac设备上的摄像头灯会关闭,但Windows等设备上可能不会。另一方面,
.stop()
会完全停止音轨,并告诉源不再需要它。如果源只连接到这个音轨,源本身会完全停止。调用.stop()
肯定会关闭摄像头和摄像头灯,但你将无法在流示例中重新打开它(因为它的视频轨道被破坏了).因此,完全关闭摄像头并不是你想做的;只要坚持使用.enabled = false
来暂时禁用视频,使用.enabled = true
来重新打开它。p5cysglq3#
我们需要在navigator.mediaDevices. getUserMedia方法中分配
window.localStream = stream;
用于停止网络摄像头和LED指示灯关闭。
localStream.getVideoTracks()[0].stop();
video.src = '';