getusermedia - MediaStream 引用未删除/为什么我的网络摄像头一直处于忙碌状态?

标签 getusermedia navigator mediastream

背景/问题

使用navigator.mediaDevices.getUserMedia(constraints)我可以获得各种设备的MediaStream对象,其中包括网络摄像头和麦克风,允许您对通过的数据执行任何您想要的操作。

方法getUserMedia返回一个Promise,它解析为媒体流,或者如果没有给定约束(视频、音频等)可用的流则拒绝。获取流对象,但不保存对 MediaStream 的任何引用 - 我知道垃圾收集器应该删除它。

我观察到流没有被删除 - 例如,如果我获得网络摄像头的流,即使我没有对该流的任何引用,它仍然很忙。

问题

  1. 如果我不保存对 MediaStream 对象的引用,该对象将存储在哪里?
  2. 为什么它没有被垃圾收集器删除?
  3. 为什么我的网络摄像头一直处于忙碌状态?

最佳答案

MediaStream API要求您停止获得的 MediaStream 实例中包含的每个轨道。在您这样做之前,媒体捕获将继续进行。

navigator.mediaDevices
  .getUserMedia({
    audio: true,
    video: true
  })
  .then(function (stream) {
    console.log('got stream with id ' + stream.id)
    stream.getTracks().forEach(function (track) { track.stop() })
    // WebCam will not be busy anymore
  })
  .catch(function (reason) {
    console.error('capture failed ' + reason)
  })

关于getusermedia - MediaStream 引用未删除/为什么我的网络摄像头一直处于忙碌状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40475601/

相关文章:

javascript - WebRTC getUserMedia() 流显示静态快照而不是视频

javascript - 以全分辨率捕获 HTML5 中的图像

javascript - 是否可以在客户端运行代理视频媒体请求的 javascript 代理?

google-chrome - 无法在 Google Chrome 中选择正确的网络摄像头

macos - 在Safari上调用getUserMedia会使Mac OS X上的声音静音一秒钟

javascript - IOS WebRTC js 黑屏

reactjs - MainApplication.java 中的 React-Native-Reanimated 错误

javascript - 如果用户使用 PC 或平板电脑或智能手机,Sencha Touch 如何加载自定义 CSS 和 JS?

javascript - 如何使 navigator.sendBeacon 使用 GET 方法

javascript - 如何在 js Web 应用程序中获取音频或视频通话的记录? IE。如何将 MediaStream 路由到语音到文本 API