重新连接网络摄像头时,WebRTC会继续播放视频流

时间:2015-09-03 09:43:28

标签: javascript html5 video webrtc getusermedia

我通过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 () {});

基于上面的例子,我可以:

  1. 检测最近连接的媒体设备
  2. 检查是否与我从
  3. 流式传输的设备相同

2 个答案:

答案 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,您需要启用"实验性网络平台功能"标志。