如何将无间隙m4a轨道转换为无间隙HLS流

时间:2014-03-17 13:08:03

标签: avplayer http-live-streaming aac m4a

我将相册存储为无间隙m4a文件列表,从CD中删除。我需要通过HTTP Live Streaming无缝地流式播放专辑,用户必须能够在任何曲目的开头“跳入”。目前,我唯一的客户端是iOS上的AVPlayer。

我可以使用Apple's mediafilesegmenter tool分别对曲目进行分段。对于每个轨道,这将生成一个.m3u8播放列表文件和几个.aac段文件,每个持续约10秒,除了最后一个。

Track 1的m3u8播放列表如下所示:

#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 个答案:

答案 0 :(得分:1)

您可以在组合的AAC文件上使用mediafilesegmenter工具之前连接AAC文件。

以下ffmpeg命令可能会生成输出文件。

  

ffmpeg -i“concat:input1.aac | input2.aac | input3.aac”-c copy output.aac

您可能需要在连接之前将aac文件重新加载到mpeg2ts文件,然后将mpeg2ts文件重新加载到AAC。