Ошибка парсинга m3u8 файла ll hls на ios

AVRozk

New Member
Добрый день.
У нас сейчас проблема выявилась.
У нас стримы работают и через какое-то время после запуска перестают работать.
Снифил трафик. Он запрашивает плейлист и в ios выдается ошибка Error Domain=CoreMediaErrorDomain Code=-12642 "(null)"
Обычно он запрашивает плейлист еще пару раз, а потом видео.

Вроде локализовал проблему.
Из-за этой строки #EXT-X-PART-INF:PART-TARGET=12.2670
Если снифером поменять на 0.40000 то работает.

Ниже где видео приходят параметры #EXT-X-PART:DURATION=0.40000

Может они как-то конфликтуют.
 

Max

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

Уточните, пожалуйста,
- номер сборки WCS
- как публикуется поток (WebRTC, RTMP; какой клиент и параметры потока)
- полные настройки HLS
 

AVRozk

New Member
Добрый день,

Уточните, пожалуйста,
- номер сборки WCS
- как публикуется поток (WebRTC, RTMP; какой клиент и параметры потока)
- полные настройки HLS
Номер сборки - 5.2.1613
Поток - rtmp
Настройки:
hls_ll_enabled=true
hls_auto_start=true
hls_preloader_enabled=false
hls_player_width=720
hls_player_height=1280
video_filter_enable_fps=true
video_filter_fps=30
video_encoder_h264_gop=60
 

Max

Administrator
Staff member
Сборка 5.2.1613 устарела в части HLS и не содержит многих актуальных фиксов. Пожалуйста, обновите сервер до последней сборки 5.2.1782 и проверьте, воспроизводится ли проблема с ней. Также обращаем внимание, что на сервере должно быть достаточное количество ядер CPU для кодирования потоков 720p (одно ядро на два таких потока).
 

AVRozk

New Member
Добрый день.
Обновились. Ошибка пропала. Но появилась проблема.
Задержка появляется до 40 секунд и видео может воспроизводиться, потом зависнуть.
По сниферу я вижу что стало отдельно аудио запрашивать.
Мне кажется он стал более активно запрашивать фрагменты. В секунду запросов 10-20.
Не знаю на сколько это нормально.
 

Attachments

AVRozk

New Member
Еще заметил что разная задержка у аудио и видео в плейлистах. У видео стабильно 0.4, а у аудио 5 фрагметов по 0.384, еще еще один 0.17. Итоговая получается у видео 2.0, у аудио 2.09
Может быть в этом проблема.
 

Attachments

Max

Administrator
Staff member
Еще заметил что разная задержка у аудио и видео в плейлистах. У видео стабильно 0.4, а у аудио 5 фрагметов по 0.384, еще еще один 0.17.
Создали тикет WCS-3963, о прогрессе сообщим здесь.
Как временное решение, можно использовать контейнер ts, там аудио дорожка идет в одном контейнере с видео, и такой проблемы не должно быть:
Code:
ll_hls_fragmented_mp4=false
По сниферу я вижу что стало отдельно аудио запрашивать.
Это нормальное поведение для m4s контейнера, аудио идет отдельной дорожкой.
Мне кажется он стал более активно запрашивать фрагменты. В секунду запросов 10-20.
Частота запросов определеятся браузером, а не сервером. Уточните версию iOS Safari, пожалуйста.
 

AVRozk

New Member
Частота запросов определеятся браузером, а не сервером. Уточните версию iOS Safari, пожалуйста.
Это не браузер это из кода AVPlayer. Какой-то привязки к ios не заметил.
 

Max

Administrator
Staff member
Проверли тесты в рамках тикета WCS-3963. Различие в DURATION между аудио и видео дорожками - это ожидаемое поведение. Спецификация HLS требует, чтобы значение DURATION не превышало PART-TIME, это требование выполняется.
Что касается задержки, это выглядит как баг в Safari 16 (и выше) или Webkit, поскольку воспроизводится и для потоков с других серверов: Wowza, Nimble и т.д., но при этом задержки в браузере iOS Safari 15 нет.
Это не браузер это из кода AVPlayer. Какой-то привязки к ios не заметил.
На скриншоте приведена консоль браузера.
 
Last edited:

Max

Administrator
Staff member
В любом случае, частота запросов определяется клиентом, как и то, будет ли клиент пытаться проигрывать плейлист сначала (из-за этого и возникает задержка). Также дополнительная задержка и фризы могут возникать оттого, что пропускная способность канала между сервером и клиентом меньше, чем битрейт потока. Рекомендуем снизить битрейт публикации до 1000 кбит/с и разрешение транскодирования до 640x360
Code:
hls_player_width=640
hls_player_height=360
будет ли в этом случае фризить?
Если тестируете публикацию WebRTC и проигрывание HLS, добавьте следующие настройки на стороне сервера
Code:
periodic_fir_request=true
periodic_fir_request_interval=2000
Какой-то привязки к ios не заметил.
Поведение определяется версией iOS. В Safari и в AVPlayer скорее всего используется один и тот же движок для проигрывания HLS.
Если есть примеры тестовых LL HLS потоков (с частичными сегментами) в контейнере m4s (cmaf), которые играют без задержки, предоставьте их нам для тестирования, мы сравним с тем, что нарезает WCS. Используйте эту форму для приватных потоков (поле RTSP URL и поле Comment, если их несколько).
 
Top