ios Можно ли ускорить переключение стримов

AVRozk

New Member
У нас есть лента стримов.
При запуске ленты мы создаем сессию WCSSession.
И переключаемся между стримами с помощью session.createStream

Стрим передается на сервер по rtmp. Поставили задержку ключевых кадров 0.1
Клиент иногда подключается меньше чем за 2 секунды, иногда это дольше 3.

Заказчик хочет чтобы оно было в пределах 1 сек. Можно как-то этого добиться с помощью webrtc или надо делать рестрим с использованием другой технологии?
 

Max

Administrator
Staff member
Здравствуйте.

Максимальной скорости переключения можно достичь при использовании инжектов.
Инжект - это вставка контента одного потока в другой поток.
Допустим, у вас есть список стримов: stream1, stream2, stream3
И поток stream_main, который играет зритель.
В этом случае, вы можете делать последовательные вставки:
stream1 > stream_main
stream2 > stream_main
stream3 > stream_main
И зритель будет видеть последовательно контент трех потоков, stream1, stream2, stream3
Однако, такой способ не подойдет для "ленты стримов" если два пользователя user1 и user2 одновременно запросят инжекты stream1 > stream_main и stream2 > stream_main, то будет конфликт. Т.е. нельзя сделать собственную ленту для каждого пользователя.

Поэтому нужна функция вставки контента в текущий поток зрителя по запросу (на данный момент не реализована).
Т.е. нужно чтобы зритель создал ровно один стрим с помощью createStream() и далее управлял контентом, который показывает этот стрим.
Например injectPlay("myStream","streamFromTheList"); В этом случае сервер должен взять контент из стрима "streamFromTheList" и вставить этот контент в текущий стрим, который уже играет "myStream".
Тогда пользователь сможет относительно "бесшовно" переключаться между стримами. При этом, нужно понимать, что добиться времени переключения менее 1 секунды скорее всего не удастстя, т.к. нормальное расстояние между ключевыми кадрами 2-3 секунды и уменьшать его не рекомендуется и вредно для качества видео.
 
Top