2016-12-13 25 views
2

我試圖獲取不同的MediaStreams,同時在每種情況下指定不同的deviceId如何在Firefox中獲取具有不同設備約束的多個流?

例如:我有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),其中所有的音軌都具有預期的標籤。

chrome output

但是失敗,用下面的錯誤的第二和第三呼叫到getUserMedia(C2,C3)在Firefox(50.0.2):

firefox output

According to the documentationNotReadableErrors

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是否像預期的那樣運行?由於文檔提到「硬件錯誤」? 是否有不同的方式來獲取多個流(具有不同的設備約束)?或者我必須停止流,釋放設備,然後獲取新的流?

謝謝你的時間。

回答

5

當前(每晚現在是53)Firefox不支持多個活動音頻輸入源。

這是我們正在考慮的事情,但它需要對我們的MediaStream管道進行一些相當重大的更改。這都與漂移有關 - 輸入(和輸出)運行不同的時鐘。

我們正在考慮採取一箇中間步驟,將新設備的請求解釋爲切換設備的意圖。這樣,我們可以保持第一次打開,而第二次提示是可見的,然後無縫切換。對於bug 1299324這個問題,這是相對較低的結果。

+0

嗨,非常感謝您的快速回復。所以多個活動的**視頻輸入源**應該沒有問題地工作? (我做了一個快速測試,似乎工作)。目前爲了釋放相關設備,我不得不停下軌道? – wpp

+2

正確和正確。並且要注意,如果設備已通過不同的流程獲取,通常無法獲取設備。 – pehrsons

相關問題