WebRTC - 如何静音本地音频输出

Posted

技术标签:

【中文标题】WebRTC - 如何静音本地音频输出【英文标题】:WebRTC - How to mute local audio output 【发布时间】:2015-03-10 14:21:29 【问题描述】:

我正在尝试仅在 WebRTC 中静音本地音频播放,更具体地说是在 getUserMedia() 之后和建立任何服务器连接之前。我找到的所有选项都不起作用;这个来自 Muaz Khan 的失败:

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

source

这种技术也被 described here 视为“工作”,但在 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;

Also similar question, but its for video, so not the same

【问题讨论】:

为什么不将html视频标签设置为静音? 在我的情况下这并不理想,但标签是否支持音频“仅”静音? 静音视频 html 标签会静音与视频相关的音频。视频将继续播放,流中的音频和视频轨道仍然可以访问并能够发送到另一个对等点。不过,听起来您在 ubuntu 上的那个 Chrome 版本中发现了一个确实需要解决的错误。 【参考方案1】:

添加这个作为答案,因为它是事实上的正确答案:

您所说的解决方法是许多主要 WebRTC 视频平台所使用的:

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

【讨论】:

只有录音怎么样,比如 video: false, audio: true ? @headkit 根本不将您自己的音频附加到 DOM。要向用户指示正在捕获音频,您可以显示波形或说话指示器。 嗨@xdumaine,我所做的是,我在javascript上实例化了new Audio()。在流式传输正在播放的数据时是否仍然可以静音?

以上是关于WebRTC - 如何静音本地音频输出的主要内容,如果未能解决你的问题,请参考以下文章

如何在 webrtc 中将麦克风静音/取消静音

WebRTC iOS,如何静音视频通话

在 WebRTC 房间中订阅/动态静音许多音频流的理想方法?

如何在 ionic 平台的 APIRTC 上静音和取消静音视频/音频?

Android端WebRTC音视频通话录音-获取音频输出数据

iOS:静音右声道音量