При публикации или воспроизведении видео на мобильных устройствах, браузер может по умолчанию требовать требует действий от пользователя (нажатие кнопки). Чтобы обойти это ограничение, необходимо использовать функции 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 Block | ||||
---|---|---|---|---|
| ||||
if (Browser.isSafariWebRTC()) {
Flashphoner.playFirstVideo(localVideo, true, PRELOADER_URL).then(function() {
publishStream();
});
return;
} |
и воспроизведении
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 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(); |