如何在Firefox中获取具有不同设备约束的多个流?

时间:2016-12-13 13:59:40

标签: firefox webrtc getusermedia

我正在尝试获取不同的MediaStream,同时在每种情况下指定不同的deviceId

例如:我有3个麦克风(audioinputs)可用,并希望为每个麦克风获取音频流。

  1. streamC1:deviceId 4hYbpq3YGKqNN6RbbLz5HrLfolsmjFDMl8sY
  2. streamC2:deviceId MZ0gdxcs1Q0NW0sobM8ri3kfDhmOs1K74e2p
  3. streamC3:deviceId iUWqFDfruPGcT6nl9gUxeN6dCM8VfFH5ZmR8

    const c1 = { audio: { deviceId: { exact: audioInputs[0].deviceId } } };
    const c2 = { audio: { deviceId: { exact: audioInputs[1].deviceId } } };
    const c3 = { audio: { deviceId: { exact: audioInputs[2].deviceId } } };
    
    getMedia(c1)
     .then(() => getMedia(c2))
     .then(() => getMedia(c3));
    
  4. Here is a complete JSFiddle

    这在Chrome(版本55.0.2883.87)中运行良好,我得到3个不同的流(C1,C2,C3),所有audioTracks都有预期的标签。

    chrome output

    但是在Firefox(50.0.2)中对getUserMedia(C2,C3)的第二次和第三次调用失败,并出现以下错误:

    firefox output

    NotReadableErrors

    According to the documentation

      

    虽然用户已授予使用匹配设备的权限,但操作系统,浏览器或网页级别发生硬件错误,导致无法访问设备。

    (但我可以使用相同的约束获取多个流,而不会遇到这个问题。)

    Firefox在这方面表现如何吗?由于文档提到“硬件错误”? 是否有不同的方法来获取多个流(具有不同的设备约束)?或者我是否必须停止流,释放设备然后获取新流?

    感谢您的时间。

1 个答案:

答案 0 :(得分:5)

目前(Nightly现为53)Firefox不支持多个有源音频输入源。

这是我们正在考虑的事情,但它需要对我们的MediaStream管道进行一些相当重大的更改。这一切都与漂移 - 输出(和输出)在不同时钟上运行有关。

我们正在考虑通过将新设备的请求解释为切换设备的意图来采取中间步骤。这允许我们保持第一个打开,同时第二个提示可见,然后无缝切换。对于bug 1299324中的问题,这是相对低调的成果。