web-dev-qa-db-ja.com

WebRTC-ローカルオーディオ出力をミュートする方法

WebRTCでのローカルオーディオ再生のみをミュートしようとしています。具体的には、getUserMedia()の後、サーバー接続が確立される前です。私が見つけたオプションはどれも機能しません。 Muaz Khanからのこれは失敗します:

var audioTracks = localMediaStream.getAudioTracks();
// if MediaStream has reference to microphone
if (audioTracks[0]) {
    audioTracks[0].enabled = false;
}

ソース

この手法も ここで説明 「動作中」ですが、ここではChromeバージョン39.0.2171.95(64ビット)(Ubuntu 14.04)で失敗します。

ボリュームゲインを使用して機能すると言われている追加の方法:

window.AudioContext = window.AudioContext || window.webkitAudioContext;
var audioContext = new AudioContext();
var source = audioContext.createMediaStreamSource(clientStream);
var volume = audioContext.createGain();
source.connect(volume);
volume.connect(audioContext.destination);
volume.gain.value = 0;  //turn off the speakers

tl; drスピーカーのマイクからの入力を聞きたくないのですが、ビデオ画像を見たいのです。

回避策

この回避策は Benjamin Trent によって提案され、次のようにビデオタグにmuted属性を設定することでオーディオをミュートします。

document.getElementById("html5vid").muted = true;

これも同様の質問ですが、ビデオ用なので同じではありません

16
Paul Gregoire

これは事実上の正解であるため、これを回答として追加します。

回避策として述べたことは、多くの主要なWebRTCビデオプラットフォームで使用されているものです。

navigator.mediaDevices.getUserMedia({ video: true, audio: true })
  .then(stream => {
    const vid = document.getElementById('html5vid');
    vid.autoplay = true;
    vid.muted = true;
    vid.srcObject = stream;
  });
14
xdumaine