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 错误?的主要内容,如果未能解决你的问题,请参考以下文章