2016-06-20 51 views
1

我已經創建了如何讓運行mediaStream

navigator.getUserMedia({ "video": true }, function(stream){ 
    videoTag.src = window.URL.createObjectURL(stream); 
    videoTag.play(); 
} 

我可以在全球範圍內訪問MediaStream對象stream攝像頭流?*

(類似navigator.getAllMediaStreams[0]

*編輯:...不添加getUserMedia函數的邏輯。我的問題案例是qr解碼器庫,它爲我獲取流,我不想更改第三方代碼

回答

4

瀏覽器沒有保存活動媒體流的列表。

您可以將流保存爲例如window.stream。

+0

「瀏覽器沒有保存任何列表」可能會回答我的背景問題(請參閱編輯),所以我會接受這個答案。 – Breaker222

3

肯定的:

navigator.allMediaStreams = []; 

navigator.mediaDevices.getUserMedia({ "video": true }).then(stream => { 
    navigator.allMediaStreams.push(stream); 
    console.log(navigator.allMediaStreams.length); // 1 
}) 
.catch(e => console.error(e)); 

console.log(navigator.allMediaStreams.length); // 0 

才明白,數組將是空的,直到成功回調火災。

它就像任何其他的JavaScript對象。只要您保留對某個流的引用(因此它不會被垃圾回收),並且不要撥打stop()就可以了,您將擁有一個可供您使用的實時視頻流,以及活動攝像頭指示燈,如果有的話,會在這段時間內開啓。

與其他任何JavaScript變量一樣,它仍然與頁面綁定,即使掛起navigator,也不會在頁面導航中存活。