从 ts 文件列表创建 m3u8 文件

Create m3u8 file from list of ts files

我想从 ts 文件列表中创建 'm3u8' 文件。我该怎么做?

我确实在 google 中搜索并阅读了 ffmpeg 的文档,但我没有找到任何东西。

你可能想要 HLS structure. There's a lot of documentation at Apple (IIRC it was invented by Apple and then got adopted widely), e.g. a draft RFC and a page with example streams.

HLS 由两个级别组成:一个引用其他 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 文件的长度(它们的长度必须相同)。它可以是相对路径或绝对路径。

不清楚您要问的是以下哪种情况,因此这里有一个针对这两种情况的快速回答:

  1. 如果您从包含您的内容的单个文件开始 这是最常见的情况。通常,从源 material.
  2. 创建可播放的 HlS 流需要三个步骤
  • 对于每个所需的输出级别(为简单起见,假设比特率),您需要创建一个分段的 .ts 文件集合。
  • 对于每个输出级别,您需要一个播放列表清单 (m3u8),其中包含构成内容的片段文件列表。
  • 对于整个流,您需要一个列出播放列表的主清单(另一个 m3u8)。

FFMpeg 可以完成这三项工作。

  1. 如果您从一组 .ts 文件开始 如果您真的从一组 .ts 文件开始,您可以按照上一个答案中的描述手动构建一个 m3u8 文件,或者您可以编写一个脚本来完成它。

无论哪种情况,.ts 文件都有一些注意事项:

  • 如果片段文件不属于不间断的序列(如果它们是从单个源剪辑转码用于 HLS 的话),您需要插入 EXT-X-不具有相同编码特征或不具有单调递增 PTS(呈现时间戳)值的段之间的不连续标记。

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

  • “对于 VOD 内容,平均段比特率必须在 AVERAGE-BANDWIDTH 属性的 10% 以内”

当您构建了 m3u8 文件后,运行 它可以帮助通过验证器找到任何 problems.This 比挠头想知道为什么 HLS 流播放不佳或在 players/browsers.

之间不一致