Общие правила
При публикации или воспроизведении видео на мобильных устройствах, браузер может по умолчанию требовать требует действий от пользователя (нажатие кнопки). Чтобы обойти это ограничение, необходимо использовать функции playFirstSound() (только при воспроизведении в WSPlayer) и playFirstVideo() (при воспроизведении по WebRTC в iOS Safari и по MSE в остальных браузерах):Кроме того, аудио в элементе HTML5 video должно быть заглушено
Code Block |
---|
|
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 |
---|
|
if (Browser.isSafariWebRTC()) {
Flashphoner.playFirstVideo(localVideo, true, PRELOADER_URL).then(function() {
publishStream();
});
return;
} |
и воспроизведении
code
Code Block |
---|
|
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 |
---|
|
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, который возвращает эта функция, будет отклонен
code
Code Block |
---|
|
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);
});
} |