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

Восстановление публикации с выбранной камеры в iOS Safari

В iOS по умолчанию запрещена фоновая публикация видео. Поэтому при сворачивании окна браузера iOS Safari в фон браузер отключает видеоэлемент, с которого транслируется камера, от камеры. Затем, при разворачивании окна браузера на передний план, в зависимости от версии iOS, браузер может либо не подключить камеру к видеоэлементу, либо подключить не ту камеру, которая была выбрана до того.

В этом случае нужно обработать событие visibilitychange для документа и, если HTML страница стала видимой (то есть окно браузера развернулось на передний план), принудительно выбрать камеру

\1. Регистрация обработчика события visibilitychange

code

if (Browser.isiOS() && Browser.isSafariWebRTC()) {
    document.addEventListener('visibilitychange', () => {
        onVisibilityChanged();
    });
}

\2. Выбор камеры при разворачивании окна браузера

code

function onVisibilityChanged() {
    if (Browser.isiOS() && Browser.isSafariWebRTC() && document.hidden !== undefined) {
        // iOS Safari may change camera when rising from the background, use chosen one explicitly
        if (publishStream && !document.hidden) {
            publishStream.switchCam($('#videoInput').val()).then(function(id) {
                console.log("Switched explicitly to camera " + id);
                $('#videoInput option:selected').prop('selected', false);
                $("#videoInput option[value='"+ id +"']").prop('selected', true);
            }).catch(function(e) {
                console.log("Error " + e);
            });
        }
    }
}

Данный метод работает с WebSDK 2.0.248 на iOS Safari 12.5.7 и выше.