如何获取 运行 媒体流
how to get running mediaStream
我用
创建了一个网络摄像头流
navigator.getUserMedia({ "video": true }, function(stream){
videoTag.src = window.URL.createObjectURL(stream);
videoTag.play();
}
我可以在全局范围内访问 stream
中的 MediaStream 对象吗?*
(类似于 navigator.getAllMediaStreams[0]
)
*编辑:...没有向 getUserMedia 函数添加逻辑。我的问题案例是一个 qr-decoder-library,它为我获取流,我不想更改第三方代码
浏览器没有保留活动媒体流的列表。
您可以将流保存到例如 window.stream。
当然可以:
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
,所以它不会在页面导航中继续存在。
我用
创建了一个网络摄像头流navigator.getUserMedia({ "video": true }, function(stream){
videoTag.src = window.URL.createObjectURL(stream);
videoTag.play();
}
我可以在全局范围内访问 stream
中的 MediaStream 对象吗?*
(类似于 navigator.getAllMediaStreams[0]
)
*编辑:...没有向 getUserMedia 函数添加逻辑。我的问题案例是一个 qr-decoder-library,它为我获取流,我不想更改第三方代码
浏览器没有保留活动媒体流的列表。
您可以将流保存到例如 window.stream。
当然可以:
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
,所以它不会在页面导航中继续存在。