Проблема с iOS

Oleksandr

New Member
Здравствуйте. Я использую flashphoner, и у меня проблема с устройствами ios.
Первый скриншот - это пример кода с вашего сайта.
first.png
Он отлично работает, но если я использую метод setTimeout, например, на втором скриншоте,
second.png
, я получаю сообщение об ошибке.
third.png

Проблема актуальна для плеера, если стримить - все ок
также, если setTimeout меньше 1000 с, он тоже работает.
Чтобы воспроизвести, вы должны открыть две вкладки
На первой вкладке вы должны начать поток. на второй вкладке попытайтесь воспроизвести поток.
Также используйте user-agent Safari-ios-iphone
Это очень важно для меня, потому что мне нужно запустить стрим, когда я получаю какое-то асинхронное событие, а не когда я нажимаю кнопку. SetTimeout просто эмулирует определенное событие.
 

Max

Administrator
Staff member
Добрый день.

В iOS Safari 11 с этим есть фундаментальная проблема.
Для того чтобы начать проигрывать видео на странице, требуется активность пользователя и эта активность должна происходить в основном потоке выполнения, который вызывает воспроизведение в тэге <video>

Именно поэтому мы добавили код, который именно по клику на 'play' вызывает метод Flashphoner.playFirstVideo(remoteVideo); и проигрывает статический трехсекундный ролик на элементе remoteVideo. В результате этой манипуляции видео элемент разблокируется и сможет играть поток.

Пример:
https://wcs5-eu.flashphoner.com/client2/examples/demo/streaming/player/player.js
https://wcs5-eu.flashphoner.com/client2/examples/demo/streaming/player/player.html

Code:
if (Flashphoner.getMediaProviders()[0] === "WSPlayer") {
Flashphoner.playFirstSound();
} else if (Browser.isSafariWebRTC() || Flashphoner.getMediaProviders()[0] === "MSE") {
Flashphoner.playFirstVideo(remoteVideo);
}
Эта конструкция была добавлена осенью 2017 года, когда вышел Safari 11. Сейчас что-то могло измениться в новых версиях Safari 11, но мы не проверяли.
Поэтому попробуйте вызвать метод Flashphoner.playFirstVideo(remoteVideo); на активность пользователя. Если вам удастся это сделать, то возможно не будет проблем с последующим воспроизведением через setTimeout().
 
Top