[英]How to completely turn off camera on mediastream javascript
我正在嘗試創建一個視頻會議 web 應用程序..
問題是我試圖在中間會議上禁用我的攝像頭,它工作但我的筆記本電腦攝像頭指示燈仍然亮着(燈亮)但在我的 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
}
還有一個stop()
方法可以在 Chrome 和 Safari 中解決問題。Firefox 應該已經通過設置enabled
屬性將相機標記為未使用。
this.myStream.getVideoTracks()[0].stop();
首先, MediaStreamTrack.enabled是一個 Boolean,因此您可以簡單地分配值false
。
為了簡化您的代碼,您可以調用:
var vidTrack = myStream.getVideoTracks();
vidTrack.forEach(track => track.enabled = false);
當MediaStreamTrack.enabled = false
時,軌道將空幀傳遞給 stream,這就是發送黑色視頻的原因。 攝像頭/源本身並沒有停止——我相信網絡攝像頭燈會在 Mac 設備上關閉,但可能不會在 Windows 等設備上關閉。
.stop()
另一方面,完全停止軌道並告訴源不再需要它。 如果源僅連接到此軌道,則源本身將完全停止。 調用.stop()
肯定會關閉相機和網絡攝像頭燈,但您將無法在 stream 實例中將其重新打開(因為其視頻軌道已被破壞)。 因此,完全關閉相機並不是你想要做的; 只需堅持.enabled = false
暫時禁用視頻和.enabled = true
將其重新打開。
我們需要分配window.localStream = stream;
在 navigator.mediaDevices.getUserMedia 方法中
對於停止網絡攝像頭和 LED 燈關閉。
localStream.getVideoTracks()[0].stop();
video.src = '';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.