从ts文件列表创建m3u8文件

时间:2018-08-28 08:00:04

标签: ffmpeg hls m3u8

我想从ts文件列表中创建“ m3u8”文件。我该怎么办?

我确实在Google中搜索并阅读了ffmpeg的文档,但未找到任何内容。

2 个答案:

答案 0 :(得分:2)

不清楚您要询问以下哪种情况,所以这是两种情况的快速答案:

1)如果您从包含内容的单个文件开始 这是最常见的情况。通常,从源材料创建可播放的HLS流需要执行三个步骤。

  • 对于每个所需的输出级别(为简单起见,请使用“比特率”),您需要创建分段的.ts文件的集合。
  • 对于每个输出级别,您都需要一个播放列表清单(m3u8),其中包含组成内容的段文件列表。
  • 对于整个流,您需要一个主清单(另一个m3u8)来列出播放列表。

FFMpeg可以完成所有这三个操作。

2)如果您从.ts文件的集合开始 如果您确实是从.ts文件的集合开始的,则可以按照上一个答案中的说明手工构建m3u8文件,也可以编写脚本来完成。

在任何一种情况下,.ts文件都有一些注意事项:

  • 如果段文件不属于不间断序列(就像它们是从单个源剪辑中转码以用于HLS)一样,则需要在段之间插入EXT-X-DISCONTINUITY标签没有相同的编码特性或没有单调增加的PTS(表示时间戳)值。

  • 虽然分段的长度不必全部相同,但最长的分段不得超过EXT-X-TARGETDURATION标记中指定的(整数)秒。

  • 所有段的最大比特率不得超过EXT-X-TARGETDURATION标记中指定的值。

构建m3u8文件后,通过验证程序运行它可以发现任何问题。这比挠头想知道为什么HLS流在播放器/浏览器上播放效果差或不一致要容易得多。

答案 1 :(得分:0)

您可能想要一个HLS结构。 documentation at Apple(Apple发明了IIRC,随后被广泛采用)有很多,例如a draft RFCpage with example streams

HLS包含两个级别:主M3U8引用其他M3U8,而其他M3U8依次引用.ts文件。您可以省略主M3U8,而仅提供“第二级”。

may look something like this开始,

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:1
#EXTINF:10, no desc
media-000001.ts
#EXTINF:10, no desc
media-000002.ts
#EXTINF:10, no desc
media-000003.ts

EXT-X-TARGETDURATION指定每个.ts文件的长度(它们都必须具有相同的长度)。它可能是相对路径,也可能是绝对路径。