【问题标题】:WebRTC - How to mute local audio outputWebRTC - 如何静音本地音频输出
【发布时间】: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 版本中发现了一个确实需要解决的错误。

标签: javascript webrtc


【解决方案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()。在流式传输正在播放的数据时是否仍然可以静音?
猜你喜欢
  • 2014-01-15
  • 2016-03-31
  • 2018-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-18
  • 1970-01-01
相关资源
最近更新 更多