Не ясно, о каком из следующих случаев вы спрашиваете, поэтому вот быстрый ответ для обоих:
1) Если вы начинаете с одного файла, который содержит ваш контент
Это самый распространенный случай. В общем, есть три шага для создания воспроизводимого потока HLS из исходного материала.
- для каждого желаемого уровня вывода (скажем, битрейт для простоты), вам нужно создать коллекцию сегментированных файлов .ts.
- Для каждого выходного уровня необходим манифест плейлиста (m3u8), который содержит список файлов сегментов, составляющих содержимое.
- Для всего потока вам нужен один главный манифест (другой m3u8), в котором перечислены списки воспроизведения.
FFMpeg может выполнить все три из них.
2) Если вы начинаете с коллекции .ts файлов
Если вы действительно начинаете с набора файлов .ts, вы можете либо вручную собрать файл m3u8, как описано в предыдущем ответе, либо написать скрипт для этого.
В любом случае для файлов .ts есть несколько соображений:
Если файлы сегментов не принадлежат непрерывной последовательности (как если бы они были перекодированы из одного исходного клипа для использования в HLS), вам необходимо вставить теги EXT-X-DISCONTINUITY между сегментами которые не имеют одинаковых характеристик кодирования или не имеют монотонно увеличивающихся значений PTS (метка времени представления).
Хотя все сегменты не обязательно должны быть одинаковой длины, самый длинный не должен превышать (целое) количество секунд, указанное в теге EXT-X-TARGETDURATION.
Максимальный битрейт для всех сегментов не должен превышать значение, указанное в теге EXT-X-TARGETDURATION.
Когда вы создали свой файл m3u8, это помогает запустить его через валидатор, чтобы найти какие-либо проблемы. Это гораздо проще, чем почесать голову, задаваясь вопросом, почему поток HLS проигрывается плохо или непоследовательно во всех проигрывателях / браузерах.