Ответ 1
Похож на
ffprobe -show_frames media.ts -print_format json
дает достаточно информации о фреймах для создания такого списка воспроизведения, хотя для его создания потребуется несколько сценариев.
Я обновлю этот ответ с помощью script, если мне удастся с этим подходом.
Update:
Вот несколько полезных ссылок, которые я нашел сейчас:
Bash скрипты для создания плейлистов iframe - требуется немного оптимизации, так как он вызывает ffprobe несколько раз
iframe-playlist-generator - проект на python, который можно использовать для создания списков воспроизведения iframe из обычных
Это не совсем то, что я искал вначале, но плейлисты I-Frame похожи на байтовые диапазоны и подходят для моей задачи еще лучше, поэтому я буду использовать эти два проекта в качестве отправной точки создать что-то более подходящее для меня.
Проекты на самом деле используют разные методы для поиска размера I-Frame - bash script просто использует то, что ffprobe показывает в pkt_size, а проект python добавляет немного voodoo, вычисляя размер как разность позиций пакетов и добавление 188 для сопоставления списков воспроизведения из apple. 188 байт - это размер пакета mpeg-ts, возможно, так или иначе связанный, однако мне не удалось понять, как это сделать. Это различие в расчете размера заставляет создавать разные плейлисты, возможно, один из них некорректен, но на самом деле VLC играет без проблем, поэтому я буду придерживаться более простого метода, пока он не будет доказан как некорректный.
Обновление 2:
Я создал рубиновый модуль, который может извлекать информацию I-Frame данного файла .ts с помощью ffprobe
и строить как я -Frame и обычный byterange м3u8 плейлист (как было запрошено в вопросе) на основе этой информации.
Я нашел простой способ создания списка воспроизведения I-Frame, о котором я упоминал ранее, чтобы быть некорректным, поэтому я использовал метод из iframe-playlist-generator. Результат почти аналогичен плейлисту I-Frame, сгенерированному mediafilesegmenter -output-single-file -file-base output-dir/ input.ts
, указанному Duvrai, но иногда есть некоторые промахи размером 188 байтов для случайных кадров, Я не мог понять шаблон, поэтому он в настоящее время игнорируется.