如何开始运行 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 关​​闭

如何让 npm 永远开始运行 [重复]

如何从 0 分钟以外的时间开始每 5 分钟运行一次 cron 作业?

如何从 Blob url 中检索 MediaStream?

节点服务器开始使用 shell 脚本后如何运行另一个服务?

如何开始在开源 Apache Kafka 中运行 kafka 连接器?