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

wpp*_*wpp 2 firefox webrtc getusermedia

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

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

  1. streamC1:with deviceId4hYbpq3YGKqNN6RbbLz5HrLfolsmjFDMl8sY
  2. streamC2:with deviceIdMZ0gdxcs1Q0NW0sobM8ri3kfDhmOs1K74e2p
  3. streamC3:with deviceIdiUWqFDfruPGcT6nl9gUxeN6dCM8VfFH5ZmR8

    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));
    
    Run Code Online (Sandbox Code Playgroud)

这是一个完整的JSFiddle.

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

铬输出

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

firefox输出

根据该文件NotReadableErrors:

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

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

Firefox是否符合预期?既然文档提到了"硬件错误"?是否有不同的方法来获取多个流(具有不同的设备约束)?或者我是否必须停止流,释放设备然后获取新流?

谢谢你的时间.

peh*_*ons 5

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

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

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

  • 正确和正确.并且要注意,如果已经通过不同的过程获取了设备,则通常无法获取设备. (2认同)