簡體   English   中英

如何完全關閉媒體流上的攝像頭 javascript

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM