我通过getUserMedia获得了简单的视频流,但我想处理webCam流式传输的情况变得断开或无法使用的情况。因此,我在oninactive
对象上发现stream
事件传递给successCallback
函数。此外,我想在插入完全相同的webcam / mediaDevice时重新启动视频流。
代码示例:
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
navigator.getUserMedia(constrains, function successCallback(stream) {
this.video.src = URL.createObjectURL(stream);
stream.oninactive = function (error) {
//this handler runs when device becomes unavailable.
this.onStreamInactive(error, stream);
}.bind(this);
}.bind(this), function errorCallback () {});
基于上面的例子,我可以:
答案 0 :(得分:1)
更好的方法是使用此线程中其他答案中提到的"target": "es6",
"lib": [
"es2017",
"dom"
],
,但它仍然落后于Chrome上的标记。当您开始呼叫时,不是使用MediaDevices.ondevicechange()
枚举设备,而是定期轮询ondevicechange()
,在每个轮询间隔结束时,比较您在上一次轮询中从设备获得的设备列表。通过这种方式,您可以了解在通话过程中添加/删除的新设备。
答案 1 :(得分:0)
回答有点迟,但看起来您可以使用MediaDevices.ondevicechange
附加事件处理程序,然后在事件处理程序中查询MediaDevices.enumerateDevices()
以获取完整列表。然后检查设备列表,通过比较您拥有的缓存列表来识别最近添加的设备,并将属性与您保留的当前设备属性的记录进行比较。链接有更详尽的例子。
改编自ondevicechange
参考页
navigator.mediaDevices.ondevicechange = function(event) {
navigator.mediaDevices.enumerateDevices()
.then(function(devices) {
devices.forEach(function(device) {
console.log(device);
// check if this is the device that was disconnected
});
});
}
请注意,device
返回的enumerateDevices
个对象的类型描述为here
浏览器支持 在写这篇文章时看起来很不完整。请参阅此相关问题:Audio devices plugin and plugout event on chrome browser以进行进一步讨论,但简短的故事适用于Chrome,您需要启用"实验性网络平台功能"标志。