如何开始运行 mediaStream
Posted
技术标签:
【中文标题】如何开始运行 mediaStream【英文标题】:how to get running mediaStream 【发布时间】:2016-10-22 04:22:27 【问题描述】:我已经创建了一个网络摄像头流
navigator.getUserMedia( "video": true , function(stream)
videoTag.src = window.URL.createObjectURL(stream);
videoTag.play();
我可以在全局范围内访问stream
中的 MediaStream 对象吗?*
(类似于navigator.getAllMediaStreams[0]
)
*edit: ...不向 getUserMedia 函数添加逻辑。我的问题案例是一个 qr-decoder-library,它为我获取流,我不想更改第三方代码
【问题讨论】:
【参考方案1】:浏览器没有保存活动媒体流的列表。
您可以将流保存到例如 window.stream。
【讨论】:
“浏览器没有保存列表”可能会回答我的背景问题(见编辑),所以我会接受这个作为答案。【参考方案2】:当然:
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
上,所以它不会在页面导航中存活。
【讨论】:
以上是关于如何开始运行 mediaStream的主要内容,如果未能解决你的问题,请参考以下文章
在同一视频标签上录制和播放时 MediaStream 关闭