Как преобразовать треки m4a без пропусков в поток HLS без пропусков
У меня есть альбом, хранящийся в виде списка бездействующих файлов m4a, скопированных с компакт-диска. Мне нужно безостановочно транслировать альбом через HTTP Live Streaming, и пользователь должен иметь возможность "прыгать" в начале любого трека. На данный момент мой единственный клиент - это AVPlayer на iOS.
Я могу сегментировать дорожки по отдельности, используя инструмент mediafilesegmenter от Apple. Для каждой дорожки создается один файл списка воспроизведения.m3u8 и несколько файлов сегмента.aac, каждый продолжительностью ~10 секунд, за исключением последнего.
Плейлист m3u8 для трека 1 выглядит следующим образом:
#EXTM3U
#EXT-X-TARGETDURATION:11
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:10.001,
segment0.aac
#EXTINF:9.983,
segment1.aac
...
#EXTINF:3.231,
segment23.aac
#EXT-X-ENDLIST
Я могу объединить эти файлы списка воспроизведения m3u8 в один основной файл m3u8 для альбома:
#EXTM3U
#EXT-X-TARGETDURATION:11
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:10.001, // begin track 1
segment0.aac
#EXTINF:9.983,
segment1.aac
...
#EXTINF:3.231,
segment23.aac
#EXT-X-DISCONTINUITY
#EXTINF:10.001, // begin track 2
segment24.aac
#EXTINF:9.983,
segment25.aac
...
#EXTINF:6.845,
segment46.aac
#EXT-X-DISCONTINUITY
#EXTINF:10.001, // begin track 3
segment47.aac
#EXTINF:9.983,
segment48.aac
...
#EXTINF:8.012,
segment80.aac
#EXT-X-ENDLIST
Он будет проигрывать весь альбом, но он не без зазоров. Обратите внимание на тэг DISCONTINUITY между каждым треком (без него игрок зависает навсегда). Это создает небольшой разрыв между треками, может быть, 300 миллисекунд.
Как я могу создавать сегменты, которые перетекают друг в друга без разрывов?
1 ответ
Вы можете объединить файлы AAC перед использованием инструмента mediafilesegmenter в комбинированном файле AAC.
Следующая команда ffmpeg может сгенерировать выходной файл.
ffmpeg -i "concat: input1.aac | input2.aac | input3.aac" -c скопировать output.aac
Возможно, перед объединением вам понадобится перепаковать файлы aac в файлы mpeg2ts, а затем перепаковать файл mpeg2ts в AAC.