7

我创建了一个网络摄像头流

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

我可以stream在全局范围内访问 MediaStream 对象吗?*

(类似navigator.getAllMediaStreams[0]

*edit: ...不向 getUserMedia 函数添​​加逻辑。我的问题案例是一个 qr-decoder-library,它为我获取流,我不想更改第三方代码

4

2 回答 2

6

浏览器没有保存活动媒体流的列表。

您可以将流保存到例如 window.stream。

于 2016-06-20T19:44:46.373 回答
5

当然:

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,所以它不会在页面导航中存活。

于 2016-06-20T20:39:45.423 回答