如何在m3u8播放列表中循环TS文件

时间:2016-01-25 11:24:13

标签: video ffmpeg stream video-streaming m3u8

我想创建m3u8播放列表,如下所示:

#EXTINF:-1,LIVE STREAM
http://example.com/live01.ts

当这个文件结束时,我想重复循环。 在live01.ts结束之后,需要再次启动并在循环中执行此无限。

这可能吗?

2 个答案:

答案 0 :(得分:3)

这样的静态播放列表是不可能的。

首先,您必须在#EXT-X-DISCONTINUITY标记之前添加#EXTINF标记,以便播放器知道视频/音频帧上的时间戳不会按顺序继续。

其次,更重要的是,您需要文件头部的#EXT-X-MEDIA-SEQUENCE:<number>和/或#EXT-X-DISCONTINUITY-SEQUENCE:<number>,其增量速度与该视频块的持续时间相同。播放器将重新请求播放列表(直到它看到#EXT-X-ENDLIST)并且不递增这些值,它将继续假设http://example.com/live01.ts是序列中的第一个块。

如果您直接提供M3U8文件并且系统上有一个支持毫秒的睡眠命令,我建议这样:

file="/path/to/file.m3u8"
duration="1.337"

make_playlist() {
  echo "#EXTM3U"
  echo "#EXT-X-MEDIA-SEQUENCE:${1}"
  echo "#EXT-X-DISCONTINUITY-SEQUENCE:${1}"
  echo "#EXT-X-DISCONTINUITY"
  echo "#EXTINF:${duration},"
  echo "http://example.com/live01.ts"
  echo
}

for ((x=0;;x++)); do
  make_playlist "${x}" > "${file}"
  sleep "${duration}"
done

答案 1 :(得分:2)

这不是m3u8的官方功能。循环本身必须作为播放器设置完成。