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