Firefox 使用 rtc 创建MediaStreamDestination 错误?

Posted

技术标签:

【中文标题】Firefox 使用 rtc 创建MediaStreamDestination 错误?【英文标题】:Firefox createMediaStreamDestination bug using rtc? 【发布时间】:2015-04-09 22:39:17 【问题描述】:

我通过 rtc 流式传输音频并希望将音频静音和取消静音。

这可行...但没有增益控制:

function(stream)  /* getUserMedia stream */
      console.log("Access granted to audio/video");
      peer_connection.addStream(stream);

这适用于 chrome,但不适用于 Firefox(具有增益控制)

function(stream)  /* getUserMedia stream */
  console.log("Access granted to audio/video");
  var microphone = context.createMediaStreamSource(stream);
  gainNode = context.createGain();
  var dest = context.createMediaStreamDestination();
  microphone.connect(gainNode);
  gainNode.connect(dest);

  local_media_stream = dest.stream;
  peer_connection.addStream(local_media_stream);

我没有收到任何错误,也没有听到任何声音。 当我将 gainNode 发送到 context.destination 时,我可以听到自己的声音。

我认为“context.createMediaStreamSource(stream)”在任何方面都被破坏了。 谁能告诉我为什么?以及如何解决这个问题。


编辑:所以我检查了流并:

stream //type: LocalMediaStream    
dest.steam //type: MediaStream

在火狐中!在 chrome 中,两者都是 MediaStreams

【问题讨论】:

如果你使用navigator.mediaDevices.getUserMedia而不是navigator.getUserMedia,FF会返回什么? 相同的数据类型和相同的结果:没有声音。但值得一试:) 是的,他们可能只是提供了它并连接了与旧方法相同的代码。 【参考方案1】:

要使音频静音,您可以通过以下方式启用/禁用轨道本身:

stream.getAudioTracks()[0].enabled = false;  // mutes

这不会解决增益节点的问题,这很可能是目前 Firefox 中的错误/限制(在这种情况下,我们只能等待修复)。但如果目的是(取消)静音,这应该可以工作(它也适用于视频轨道)。

【讨论】:

遗憾的是,这个 inst 正在工作,因为流的类型是:LocalMediaStream 而不是 chrome 中的 MediaStream。所以它没有 getAudioTracks() 函数。在 chrome 中,这非常有效! 但聪明的静音方式:) @Cracker0dks 让它变得简单 :) Nightly 可能需要几个月的时间,但至少它在工作中【参考方案2】:

好的,感谢@Ken Fyrstenberg,我刚刚尝试了 Firefox Nighly 构建。 在 Nighly 上,everythink 工作正常(如在 Chrome 中)。数据类型有:

stream //type: LocalMediaStream    
dest.steam //type: MediaStream

和以前一样,但我可以听到对手的声音并且可以将麦克风静音。

所以我只需要等待发布:P

【讨论】:

以上是关于Firefox 使用 rtc 创建MediaStreamDestination 错误?的主要内容,如果未能解决你的问题,请参考以下文章

Linux RTC 驱动实验

使用 jenkins 在 RTC 上保存构建定义时出错

HTTP请求与RTC电池消耗ESP8266

如何找到内核加载的RTC模块?

使用HAL的RTC库出现年小时不准确的问题

PresenceStatus 使用 Microsoft.Rtc.Collaboration.Presence dll