Общие правила
При публикации или воспроизведении видео на мобильных устройствах, браузер требует действий от пользователя (нажатие кнопки). Кроме того, аудио в элементе HTML5 video должно быть заглушено
let video = document.createElement('video'); video.muted = true;
Включить аудио при воспроизведении можно также только по нажатию кнопки пользователем.
Таким образом, запуск публикации или воспроизведения потока в мобильном браузере в сборке WebSDK 2.0.212 должен проводиться по следующим правилам:
1. Если Websocket соединение уже установлено, и для запуска публикации или проигрывания используется отдельная кнопка, которую нажимает пользователь (Publish/Play), дополнительных действий в коде приложения не требуется
2. Если по нажатию кнопки пользователем устанавливается Websocket соединение, а затем по событию SESSION_STATUS.ESTABLISHED
запускается публикация и воспроизведение, то необходимо использовать функцию playFirstVideo()
при публикации
if (Browser.isSafariWebRTC()) { Flashphoner.playFirstVideo(localVideo, true, PRELOADER_URL).then(function() { publishStream(); }); return; }
и воспроизведении
if (Flashphoner.getMediaProviders()[0] === "WSPlayer") { ... } else if (Browser.isSafariWebRTC() || Flashphoner.getMediaProviders()[0] === "MSE") { Flashphoner.playFirstVideo(remoteVideo, false, PRELOADER_URL).then(function () { playStream(); }); return; }
Функция playFirstVideo
возвращает Promise, который разрешается, если в указанном видеоэлементе на странице удалось успешно проиграть тестовый фрагмент видео, путь к которому указан константой PRELOADER_URL
.
3. Если Websocket соединение устанавливается, а затем по событию SESSION_STATUS.ESTABLISHED
запускается воспроизведение при загрузке страницы (autoplay), необходимо использовать playFirstVideo
и отключить автоматическое включение звука при создании потока
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();
Публикация и воспроизведение в режиме Low Power Mode
В режиме Low Power Mode на iOS устройствах для публикации или воспроизведения обязательно требуется действие пользователя. Автозапуск воспроизведения в этом режиме не работает. Для того, чтобы определить этот режим, используется функция playFirstVideo
: в Low Power Mode Promise, который возвращает эта функция, будет отклонен
if (Browser.isSafariWebRTC()) { Flashphoner.playFirstVideo(pDisplay, false, PRELOADER_URL).then(function() { playStream(participant, pDisplay); }).catch(function (error) { // Low Power Mode detected, user action is needed to start playback in this mode console.log("Can't atomatically play participant" + participant.name() + " stream, use Play button"); onParticipantStopped(participant); }); }