【问题标题】:How can I know if I've already played a segment of an M3U8 video?我如何知道我是否已经播放了一段 M3U8 视频?
【发布时间】:2018-01-11 16:42:27
【问题描述】:

我正在编写一个 m3u8 播放器并且有一个小问题。我正在尝试播放的一个 m3u8 视频返回一个与段文件名无关的媒体序列,并且文件名会永远重复。我怎么知道我是否已经播放了给定的片段?

这是几秒钟后请求的样子:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:5609
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:10
#EXTINF:10.000000,
channel001.ts
#EXTINF:10.000000,
channel000.ts

然后几秒钟后:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:5610
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:10
#EXTINF:10.000000,
channel000.ts
#EXTINF:10.000000,
channel001.ts

几秒钟后又一次:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:5611
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:10
#EXTINF:10.000000,
channel001.ts
#EXTINF:10.000000,
channel000.ts

所以片段名称是相同的,媒体序列并不能告诉我太多。我如何知道我是否已经播放了这些特定片段?

谢谢。

【问题讨论】:

    标签: live-streaming http-live-streaming m3u8


    【解决方案1】:

    片段名称无关紧要,您总是使用媒体序列。每次从播放列表中删除片段时,MEDIA-SEQUENCE 都会增加。

    3。媒体细分

    ...

    媒体播放列表中的每个片段都有一个唯一的整数媒体序列 数字。 Media中第一个segment的Media Sequence Number 播放列表为 0 或在播放列表中声明(第 4.3.3.2 节)。 每个其他段的媒体序列号等于 前一段的媒体序列号加一。

    6.3.5。确定要加载的下一个段

    ...

    首先加载的段一般是客户端加载的段 已选择先玩(参见第 6.3.3 节)。

    为了正常播放演示文稿,下一个 Media Segment 要 load 是媒体序列号最小且更大的那个 比最后加载的媒体段的媒体序列号。

    RFC 8216 - HTTP Live Streaming

    【讨论】:

    • 所以我阅读了该文档,我想我只是不理解它。假设我得到一个带有 4 个 ts 文件 A、B、C、D 的 m3u8。媒体序列为零。我播放A,然后B,然后C,然后D,然后我刷新m3u8,我得到C,D,E,F。我怎么知道我上次加载m3u8时已经播放了C和D?跨度>
    • @casolorz 您加载了 A(0)、B(1)、C(2)、D(3)。接下来你需要 4 个。在刷新 A、B 时,EXT-X-MEDIA-SEQUENCE 现在是 2。播放列表包含 C(2)、D(3)、E(4)、F(5)。由于您需要 4 个,因此您跳过前两个。
    • 我想我明白了,基本上媒体序列每删除一个片段就会改变一个?
    • 是的,答案开头就提到了。
    • 媒体序列号总是用于文件的第一个片段吗?我想这是我的困惑,我认为媒体序列指向文件中的某个片段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多