如何多次将相同的段包含到m3u8播放列表中?

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

我有几个.ts文件,由ffmpeg从直播流生成。所有这些都具有相同的长度(嗯,大约)。理想情况下,它们是不断生成的,名称代表记录时的日期时间(例如,“2019-04-11_10-51-40.ts”)。但它可能会发生这种情况,由于任何技术原因,录制停止了一段时间并且文件尚未生成。

现在,我有一项任务是为某个日期时间范围创建这些文件的播放列表 - 如果该范围的一部分没有文件,我需要只显示一个黑屏。为此目的,我有一个黑色视频,长度与其他文件相同。所以,我正在尝试手动创建一个.m3u8文件,并在我拥有的普通视频之间的所有空白处插入此黑色视频。例如:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:34
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:30.07,
http://example.com/black_video.ts
#EXTINF:30.07,
http://example.com/black_video.ts
#EXTINF:33.33,
http://example.com/2019-04-11_10-51-40.ts
#EXTINF:33.33,
http://example.com/2019-04-11_10-52-15.ts
#EXTINF:25.00,
http://example.com/2019-04-11_10-52-48.ts
#EXT-X-ENDLIST

问题是,当我试图播放这个播放列表时,它无法正常播放:取决于播放器或者只播放一个黑色部分,无论序列中有多少(VLC),或者播放器正在播放在第一个黑色视频(基于hls.js在我们自己的服务上为Chrome或播放器播放“播放HLS M3u8”扩展)后卡住了。

我也试过用#EXT-X-DISCONTINUITY;在这种情况下,所有视频都在播放,但进度条在每次#EXT-X-DISCONTINUITY出现后都会下降到最开始,这也是一种不受欢迎的行为。例:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:34
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:30.07,
http://example.com/black_video.ts
#EXT-X-DISCONTINUITY
#EXTINF:30.07,
http://example.com/black_video.ts
#EXTINF:33.33,
http://example.com/2019-04-11_10-51-40.ts
#EXTINF:33.33,
http://example.com/2019-04-11_10-52-15.ts
#EXTINF:25.00,
http://example.com/2019-04-11_10-52-48.ts
#EXT-X-ENDLIST

至于黑色视频本身,我尝试了几个选项:每个链接都是同一个文件;每个链接指向同一文件的不同符号链接;每个链接都是一个单独生成的黑色视频 - 它们都不起作用。

截至目前,我发现的唯一方法是收集时间范围内的所有普通视频,用黑色视频文件填充空白,然后将它们与ffmpeg -f concat合并为一个文件,并将连接文件拆分回部分。但是这种方法的工作方式比手动创建m3u8文件要长,所以我想避免使用它。

那么,手动形成的播放列表无法正常工作的原因可能是什么?我该如何解决?可能是播放列表本身的问题,或者播放列表在技术上是否合适,但我使用的播放器可能没有完全实现规范?

TLDR:我手动创建m3u8播放列表,我想在此播放列表中多次插入相同的视频。不幸的是,这样的播放列表没有被正确播放:取决于播放器,无论插入的视频多少次都被播放,或者在第一次插入的视频部分之后播放被卡住。可能是播放列表有问题,如何修复?

hls m3u8
1个回答
0
投票

在black_video.ts文件之前和之后添加#EXT-X-DISCONTINUITY标记,并将#EXT-X-VERSION标记更改为5.这应该可以解决问题。这个解决方案适用于VLC播放器。

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