WebRTC продолжить видео поток при повторном подключении веб-камеры

У меня есть простой видеопоток, работающий через getUserMedia, но я бы хотел обработать случай, когда веб-камера, с которой я транслирую, становится отключенной или недоступной. Итак, я нашел oninactive событие на stream объект передан successCallback функция. Также я хотел бы перезапустить видеопоток, когда будет подключена точно такая же веб-камера /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. Проверьте, это то же самое устройство, с которого я транслировал

2 ответа

Решение

Лучше было бы использовать MediaDevices.ondevicechange() как упоминалось в другом ответе в этой теме, но он все еще стоит за флагом в Chrome. Вместо того, чтобы использовать ondevicechange() перечислить устройства, опрос MediaDevices.enumerateDevices() через равные промежутки времени, когда вы начинаете вызов, в конце каждого интервала опроса сравнивайте список устройств, которые вы получили от устройств в предыдущем опросе. Таким образом, вы можете узнать новые устройства, добавленные / удаленные во время разговора.

Немного поздно, чтобы ответить, но, похоже, вы можете использовать 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 здесь описано

Поддержка браузера Похоже, на момент написания статьи это выглядит довольно неоднозначно. См. Следующий связанный вопрос: плагин аудиоустройств и событие о подключении в браузере Chrome для дальнейшего обсуждения, но краткий рассказ о Chrome, вам необходимо включить флаг "Функции экспериментальной веб-платформы".

Другие вопросы по тегам