Я несколько лет назад писал скрипт video transcoder'а для mvp, на входе обычный видео файл - на выходе готовый hls, в 360, 480, 720 и 1080, разбитый на 2 секундные фрагменты. 4 плейлиста m3u8 + 1 master playlist. Помню, что я много экспериментировал сначала с ts, насколько я помню, сам ffmpeg может разбивать ts на фрагменты. Получалось нормально, но иногда видео вдруг подвисало на несколько секунд в flowplayer'е - битые кадры. Позже я выяснил, что это был баг ts фрагментера, встроенного в ffmpeg (возможно, что сегодня уже исправлено). Потом экспериментировал с fragmented mp4, благо он официально поддерживается HLS, и тут уже результат лучше, битых кадров больше нет, всё идеально, да и mp4 ощутимо меньше ts. Я пробовал фрагменты 2, 3, 4, 6, 10 секунд. Выявил, что идеально, как ни крути, 2 секунды. Официальные спеки от apple подсказывают неоптимальное значение. С 2 сек фрагментами видео начинает играться максимально быстро, то же самое с перемоткой на любую позицию, независимо от длины видео. Так как чтобы начать его играть, плееру нужно скачать всего лишь первый фрагмент, который будет 50-100 кб. Может, чуть больше. Файлов, правда, получается много. Для разбития mp4 на фрагменты отлично работает bento4 mp4dash с опцией hls. Плюс ещё тогда понадобится bento4 mp4fragment для подготовки mp4 к разбитию. И может понадобиться mp4box для промежуточных операций.