Запуск стрима, если отсутствует камера

dex35

New Member
Здравствуйте.
Подскажите, можно ли запускать стрим, если у человека отсутствует камера, но в наличии микрофон?
Пробовал указывать в constraints только audio - видео в итоге не у кого не запускается, используем roomApi.
 

Max

Administrator
Staff member
Добрый день.
Необходимо явно указать, что видео в потоке не будет:
Code:
constraints: {
  video: false,
  audio: true
}
Если просто не указать видео, то будут приняты констрейнты по умолчанию, и браузер попытается захватить камеру (которой нет)
Если же Вам необходимо публиковать видео+аудио или только аудио в зависимости от конкретного клиента, заведите на веб странице переключатель, по которому включайте или отключайте видео в констрейнтах, как в примере Media Devices
1620887993127.png

Код, который это делает в примере, доступен на GitHub
Code:
function getConstraints() {
    constraints = {
        audio: $("#sendAudio").is(':checked'),
        video: $("#sendVideo").is(':checked'),
    };
    ...
    return constraints;
}
 
Last edited:

dex35

New Member
Добрый день.
Необходимо явно указать, что видео в потоке не будет:
Code:
constraints: {
  video: false,
  audio: true
}
Если просто не указать видео, то будут приняты констрейнты по умолчанию, и браузер попытается захватить камеру (которой нет)
Т.е. сначала нужно узнать, есть ли у пользователя камера, и только потом указывать констрейнты при публикации?
 

Max

Administrator
Staff member
Т.е. сначала нужно узнать, есть ли у пользователя камера, и только потом указывать констрейнты при публикации?
Да, например, перебрать камеры, доступные браузеру, и, если нет ни одной (летит исключение), выставить констрейнты:
Code:
constraints = {
       video: true,
       audio: true
};
Flashphoner.getMediaDevices(null, true, MEDIA_DEVICE_KIND.INPUT, {video: true, audio: false}).then(function (list) {
    list.video.forEach(function (device) {
        console.log("Camera found: " + device.id);
        break;
    });
}).catch(function (error) {
    constraints.video = false;
});
 
Top