从 ts 文件列表创建 m3u8 文件
Posted
技术标签:
【中文标题】从 ts 文件列表创建 m3u8 文件【英文标题】:Create m3u8 file from list of ts files 【发布时间】:2019-02-02 19:01:51 【问题描述】:我想从 ts 文件列表中创建“m3u8”文件。我该怎么做?
我确实在谷歌搜索并阅读了 ffmpeg 的文档,但我没有找到任何东西。
【问题讨论】:
已经是一个答案:***.com/a/51274324/560435 如果您想获取 ts 文件列表,使该列表中的每个条目成为播放列表中的一个条目。注意 - #EXT-X-DISCONTINUITY 分隔列表条目的 .查看“不连续性”规范,了解更多关于构建您自己的列表的信息 【参考方案1】:尚不清楚您要问的是以下哪种情况,因此以下是对这两种情况的快速回答:
-
如果您从包含内容的单个文件开始
这是最常见的情况。一般来说,从源素材创建可播放的 HlS 流需要三个步骤。
FFMpeg 可以做到这三个方面。
-
如果您从一组 .ts 文件开始
如果您真的从 .ts 文件的集合开始,您可以按照上一个答案中的描述手动构建一个 m3u8 文件,或者您可以编写一个脚本来执行此操作。
在任何一种情况下,.ts 文件都有一些注意事项:
如果片段文件不属于不间断序列(就像它们是从单个源剪辑转码以用于 HLS 一样),您需要在不属于的片段之间插入 EXT-X-DISCONTINUITY 标签t 具有相同的编码特征或不具有单调递增的 PTS(表示时间戳)值。
虽然段不需要都具有相同的长度,但最长的段不得超过 EXT-X-TARGETDURATION 标记中指定的(整数)秒数。
“对于 VOD 内容,平均分段比特率必须在 AVERAGE-BANDWIDTH 属性的 10% 以内”
当您构建了 m3u8 文件后,通过验证器运行它以发现任何问题会有所帮助。这比挠头想知道为什么 HLS 流在播放器/浏览器之间播放效果不佳或不一致要容易得多。
macOS 上的mediaStreamValidator 非常好https://developer.apple.com/documentation/http_live_streaming/about_apple_s_http_live_streaming_tools 还可以考虑 Theo 的在线工具:http://inspectstream.theoplayer.com/【讨论】:
如何在不知道每个 .ts 文件持续时间的情况下手动创建 m3u8 文件?【参考方案2】:您可能想要一个HLS 结构。有很多documentation at Apple(IIRC 它是由 Apple 发明的,然后被广泛采用),例如a draft RFC 和 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
文件的长度(它们的长度必须相同)。它可以是相对路径或绝对路径。
【讨论】:
谢谢。我知道 hls。我想从我的 ts 文件创建播放列表(m3u8)而不重新创建它们。必须手动创建和编辑 m3u8 文件,或者我可以使用 ffmpeg。以上是关于从 ts 文件列表创建 m3u8 文件的主要内容,如果未能解决你的问题,请参考以下文章