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

How to acquire multiple streams with different device constraints in Firefox?

我正在尝试获取不同的 MediaStreams,同时在每种情况下指定不同的 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));
    

Here is a complete JSFiddle.

这在 Chrome(版本 55.0.2883.87)中工作正常,我得到 3 个不同的流(C1、C2、C3),所有音频轨道都具有预期的标签。

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

According to the documentation 对于 NotReadableErrors:

Although the user granted permission to use the matching devices, a hardware error occurred at the operating system, browser, or Web page level which prevented access to the device.

(但是,我可以获取具有相同约束条件的多个流,而不会 运行 进入该问题。)

Firefox 的行为是否符合预期?由于文档提到 "hardware error"? 是否有不同的方式来获取多个流(具有不同的设备限制)?还是我必须停止流,释放设备然后获取新流?

感谢您的宝贵时间。

目前(Nightly 现在是 53)Firefox 不支持多个活动音频输入源。

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

我们正在考虑为此采取一个中间步骤,将对新设备的请求解释为切换设备的意图。这使我们可以在第二个提示可见的同时保持第一个打开,然后无缝切换。对于 bug 1299324.

中的问题,这是相对容易实现的结果