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

纳斯弗洛奇

我有几个.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浏览器或播放器的“ Play 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播放列表,我想多次将同一视频插入此播放列表。不幸的是,这样的播放列表无法正确播放:取决于播放器,插入的视频无论被播放多少次都只能播放一次,或者在第一个插入的视频部分之后播放会停滞。播放列表可能有问题,如何解决?

希伦·帕特尔(Hiren Patel)

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

ffmpeg:如何在 m3u8 播放列表中包含动态路径?(播放列表和片段位于不同的目录中。)

如何镜像或 CDN 一个 m3u8 流播放列表?

如何使用ffmpeg加密AES-128 HLS m3u8播放列表?

Video.js,如何动态更新m3u8播放列表

如何从iframe嵌入代码获取m3u8播放列表

如何在同一片段中创建多个Retrofit回调-Android

将 m3u8 播放列表文件转换为 XML 列表

如何在字符串而不是m3u8播放列表中使用loadSource()?

解密不使用IV的AES-128加密的M3U8播放列表

在将某些数据传递到活动后,如何从同一片段中结束片段?

从其他活动返回同一片段时,如何保存和恢复片段中RecyclerView的滚动位置?

如何使用片段中的相机并在同一片段的图像视图中显示捕获的图像?

生成M3U8 HLS播放列表时,我应该包括尚不存在的媒体片段吗?

在返回堆栈防止同一片段

防止导航到同一片段

Android导航:从同一片段访问NavHostFragment

将Depthbuffer和TextureBuffer发送到同一片段OpenGL3

如果未找到ENDLIST键,m3u8播放列表是否支持seekto功能

chrome中使用vue的hls.js不会更新m3u8播放列表

如何使用FFMPEG创建持续时间固定的m3u8播放列表和mpeg-ts块?

PHP-如何通过流URL的公共部分匹配来自两个m3u8播放列表的流?

VLC 只播放 m3u8 文件的最后一段?

片段到活动再次在同一片段上

如何播放m3u8文件?

在Android的videoview中播放m3u8

防止同一片段堆叠超过一次(addToBackStack)

EventBus在同一片段中发布和订阅

在Variant live m3u8文件中,.ts文件在具有视频内容的不同比特率播放列表中是否具有相同的序列号

如何通过单击后退(不是“后退硬件”按钮)返回到上一片段?