我用
创建了一个webCam Streamnavigator.getUserMedia({ "video": true }, function(stream){
videoTag.src = window.URL.createObjectURL(stream);
videoTag.play();
}
我可以在全局范围内访问stream
中的MediaStream对象吗?*
(类似于navigator.getAllMediaStreams[0]
)
*编辑:...而不向getUserMedia函数添加逻辑。我的问题是一个qr-decoder-library,它为我获取流,我不想更改第三方代码
答案 0 :(得分:5)
浏览器没有保留活动媒体流的列表。
您可以将流保存到例如window.stream。
答案 1 :(得分: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
,因此它不会在页面导航中生存。