Имитировать прямой эфир с помощью HLS - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть 2 .m3u8 файла для потоковой передачи VOD (.ts из внешних ссылок), и я хочу объединить оба, но для симуляции потоковой передачи.

Это 2 .m3u8 файла, которые мой сервер генерирует в двух разных вызовах(2 разных времени).Проблема в том, что для второго #EXT-X-MEDIA-SEQUENCE:5 это должно быть 4.

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:3
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:7
#EXTINF:6,
https://.../5ZzHEGriq_medium_00001.ts
#EXTINF:6,
https://.../5ZzHEGriq_medium_00002.ts
#EXTINF:6,
https://.../5ZzHEGriq_medium_00003.ts

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:5
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:7
#EXTINF:6,
https://.../5ZzHEGriq_medium_00002.ts
#EXTINF:6,
https://.../5ZzHEGriq_medium_00003.ts
#EXTINF:6,
https://.../5ZzHEGriq_medium_00004.ts

Я использую таймер на стороне сервера, чтобы решить, какой последний фрагмент должен быть возвращен.Проблема в том, что клиент иногда делает запрос рано (в этом случае secuencia 1-2-3 меняется на 2-3-4 или 3-4-5), а другие в последнее время (1-2-3 до 5-6-7).например).

Я думаю, что лучшим вариантом будет отслеживать текущую последовательность 1-2-3 и вернуть для следующего изменения 3-4-5, но как это сделать без информации от клиента.

Я использую эту функцию для проверки текущего .ts

f(elapsedTime) {
    return fragments.findIndex(fragment => (fragment.offset + fragment.duration >= elapsedTime));
}

, где elapsedTime из глобального таймера, fragments - это объект с информацией о файлах .ts.

Как яСказано, проблема в том, когда браузер делает запрос рано или поздно.Я только установил EXT-X-MEDIA-SEQUENCE = EXT-X-MEDIA-SEQUENCE + 2 (так как я всегда возвращал список файлов 3 .ts).

...