Implement Discontinuity Index for Live Streaming Enhancements
Added a DiscontinuityIndex property to ScheduleEntry and related DTOs to track the cumulative number of discontinuities in live streaming. Updated the LiveWindowCalculator to utilize this index for generating accurate EXT-X-DISCONTINUITY-SEQUENCE values, ensuring compatibility with ffmpeg-based players. Enhanced the WriteEntriesAsync method to calculate and persist the discontinuity index during entry creation. Updated relevant tests and documentation to reflect these changes, improving the reliability of live streaming functionality.
This commit is contained in:
@@ -162,6 +162,16 @@ BuildLiveWindow(расписание, филлер, now, windowSegments, segment
|
||||
UTC; локальный пояс показывает фронтенд. Раздача встык — типичный случай без филлера; филлер
|
||||
подставляется только при пустом расписании.
|
||||
|
||||
**`EXT-X-DISCONTINUITY-SEQUENCE` обязателен.** Плейлист — скользящее окно, и когда тег
|
||||
`EXT-X-DISCONTINUITY` уезжает за его верхний край, плеер должен по-прежнему знать абсолютный номер
|
||||
текущей склейки. Без него ffmpeg-based клиенты (Jellyfin) сбивают счёт и встают на стыке серий (в
|
||||
браузере hls.js терпим и пересчитывает сам). Считать число склеек от эпохи на каждый запрос нечем —
|
||||
поэтому накопительный номер склейки `DiscontinuityIndex` **материализуется на каждой записи**
|
||||
планировщиком (`WriteEntriesAsync`, продолжая счёт от уцелевшего хвоста: смена ассета +1, разрыв во
|
||||
времени с филлером +2). Калькулятор берёт номер записи первого сегмента окна и «отматывает» его назад
|
||||
по тегам `EXT-X-DISCONTINUITY` внутри окна — так один и тот же физический сегмент сообщает один и тот
|
||||
же `DISCONTINUITY-SEQUENCE` на каждой перезагрузке.
|
||||
|
||||
**Плеер возвращается к живому краю сам.** Окно короткое, а вкладка в фоне живёт по другим правилам:
|
||||
браузер душит таймеры, hls.js не успевает тянуть сегменты, видео доигрывает буфер и встаёт. Пока
|
||||
зритель не смотрит, окно уходит вперёд на сколько угодно — и, вернувшись, он увидел бы программу,
|
||||
|
||||
Reference in New Issue
Block a user