从ts文件列表创建m3u8文件

问题描述 投票:0回答:2

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

我在谷歌搜索并阅读了ffmpeg的文档,但我没有找到任何东西。

ffmpeg hls m3u8
2个回答
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流在播放器/浏览器中播放效果不佳或不一致要容易得多。


0
投票

你可能想要一个HLS结构。有很多documentation at Apple(IIRC它是由Apple发明的,然后被广泛采用),例如, a draft RFCpage 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文件的长度(它们必须具有相同的长度)。它可以是相对路径或绝对路径。

© www.soinside.com 2019 - 2024. All rights reserved.