Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

При публикации или воспроизведении видео на мобильных устройствах, браузер может по умолчанию требовать требует действий от пользователя (нажатие кнопки). Чтобы обойти это ограничение, необходимо использовать функции playFirstSound() (только при воспроизведении в WSPlayer) и playFirstVideo() (при воспроизведении по WebRTC в iOS Safari и по MSE в остальных браузерах):Кроме того, аудио в элементе HTML5 video должно быть заглушено

Code Block
languagejs
themeRDark
    let video = document.createElement('video');
    video.muted = true;

Включить аудио при воспроизведении можно также только по нажатию кнопки пользователем.

Таким образом, запуск публикации или воспроизведения потока в мобильном браузере в сборке WebSDK 2.0.212 должен проводиться по следующим правилам:

1. Если Websocket соединение уже установлено, и для запуска публикации или проигрывания используется отдельная кнопка, которую нажимает пользователь (Publish/Play), дополнительных действий в коде приложения не требуется

2. Если по нажатию кнопки пользователем устанавливается Websocket соединение, а затем по событию SESSION_STATUS.ESTABLISHED запускается публикация и воспроизведение, то необходимо использовать функцию playFirstVideo()  при публикации

code

Code Block
languagejs
themeRDark
        if (Browser.isSafariWebRTC()) {
            Flashphoner.playFirstVideo(localVideo, true, PRELOADER_URL).then(function() {
                publishStream();
            });
            return;
        }

и воспроизведении

code

Code Block
languagejs
themeRDark
        if (Flashphoner.getMediaProviders()[0] === "WSPlayer") {
            Flashphoner.playFirstSound();...
        } else if (Browser.isSafariWebRTC() || Flashphoner.getMediaProviders()[0] === "MSE") {
            Flashphoner.playFirstVideo(remoteVideo, false, PRELOADER_URL).then(function () {
                startplayStream();
            });
            return;
        }

Функция playFirstVideo  возвращает Promise, который разрешается, если в указанном видеоэлементе на странице remoteVideo удалось успешно проиграть тестовый фрагмент видео, путь к которому указан константой PRELOADER_URL . Если Promise был разрешен, в данном видеоэлементе на странице может быть запущено воспроизведение видеопотока с сервера. Если Promise был отклонен, воспроизведение не может быть запущено.Функция должна быть вызвана для воспроизведения любого видео, в том числе и видеозвонка.

3. Если Websocket соединение устанавливается, а затем по событию SESSION_STATUS.ESTABLISHED запускается воспроизведение при загрузке страницы (autoplay), необходимо использовать playFirstVideo  и отключить автоматическое включение звука при создании потока

code

Code Block
languagejs
themeRDark
    var options = {
        name: streamName,
        display: remoteVideo,
        flashShowFullScreenButton: true
    };
    ...
    if (autoplay) {
        options.unmutePlayOnStart = false;
    }
    stream = session.createStream(options).on(STREAM_STATUS.PENDING, function (stream) {
        ...
    });
    stream.play();