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 () {});
На основании приведенного выше примера, как я могу:
- Обнаружить недавно подключенное мультимедийное устройство
- Проверьте, это то же самое устройство, с которого я транслировал
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, вам необходимо включить флаг "Функции экспериментальной веб-платформы".