背景/问题
使用navigator.mediaDevices.getUserMedia(constraints)
我可以获得各种设备的MediaStream对象,其中包括网络摄像头和麦克风,允许您对通过的数据执行任何您想要的操作。
方法getUserMedia
返回一个Promise
,它解析为媒体流,或者如果没有给定约束(视频、音频等)可用的流则拒绝。获取流对象,但不保存对 MediaStream 的任何引用 - 我知道垃圾收集器应该删除它。
我观察到流没有被删除 - 例如,如果我获得网络摄像头的流,即使我没有对该流的任何引用,它仍然很忙。
问题
- 如果我不保存对 MediaStream 对象的引用,该对象将存储在哪里?
- 为什么它没有被垃圾收集器删除?
- 为什么我的网络摄像头一直处于忙碌状态?
最佳答案
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/