При публикации или воспроизведении видео на мобильных устройствах, браузер требует действий от пользователя (нажатие кнопки). Кроме того, аудио в элементе 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();