Перейти к содержанию

Выбор камеры на мобильных устройствах

Метод Web SDK Flashphoner.getMediaDevices() позволяет получить список камер и микрофонов для переключения между ними. Метод использует navigator.mediaDevices.enumerateDevices(), и обычно этого достаточно для того, чтобы получить список всех доступных устройств ввода. Однако в этом случае нет различий между фронтальной и тыловой камерами мобильного устройства: необходимо разобрать метку (наименование) камеры, чтобы определить, что это за камера. К сожалению, в iOS Safari метки камер локализованы в соответствии с текущим языком системы, поэтому их разбор затруднителен.

Для решения этой проблемы в сборке Web SDK 2.0.274 добавлен новый метод Flashphoner.getMobileDevices(). Чтобы верно определить фронтальную и тыловую камеру, метод использует параметр facingMode в вызове navigator.mediaDevices.getUserMedia():

code

    if(Browser.isAndroid() || Browser.isiOS()) {
        ...
        if (Browser.isFirefox()) {
            // Use camera selection by name in mobile Firefox browser
            ...
        } else {
            // Use camera selection by facingMode constraint on mobile devices in Chrome and Safari
            Flashphoner.getMobileDevices(null, MEDIA_DEVICE_KIND.INPUT).then((list) => {
                setSwitchableControls(list.video, "videoInput", "sendVideo");
                setSwitchableControls(list.audio, "audioInput", "sendAudio");
                switchCamEnabled = false;
            }).catch(function (error) {
                $("#notifyFlash").text("Failed to get media devices: " + error.message);
            });
        }
    } else {
        // List all the connected devices on desktop
        Flashphoner.getMediaDevices(null, true).then(function (list) {
            setSwitchableControls(list.video, "videoInput", "sendVideo");
            setSwitchableControls(list.audio, "audioInput", "sendAudio");
        }).catch(function (error) {
            $("#notifyFlash").text("Failed to get media devices: " + error.message);
        });
    }

Известные проблемы

  1. Метод Flashphoner.getMobileDevices() не работает в мобильном браузере Firefox. В этом случае используйте метод Flashphoner.getMediaDevices().

  2. Метод Flashphoner.getMobileDevices() возвращает список видео устройств, содержащий одну фронтальную и одну тыловую камеры. Используйте идентификаторы только из этого списка для переключения между камерами.