实时播放列表,#EXT-X-TARGETDURATION 和 #EXTINF 必须相等吗?

Vic*_*hen 2 http-live-streaming ios avplayer

我有这个 m3u8 文件。#EXT-X-TARGETDURATION为8,第一段#EXTINF为6,当avplayer切换到这个m3u8时,报错如下。

错误域=CoreMediaErrorDomain 代码=-12312 \“媒体输入时间值与 MEDIA-SEQUENCE 477000 的先前播放列表不匹配:8.000000 vs 6.000000\” UserInfo={NSDescription=媒体输入时间值与 MEDIA-SEQUENCE 的先前播放列表不匹配:47700 8.000000 对 6.000000}”

 #EXTM3U
 #EXT-X-MEDIA-SEQUENCE:477000
#EXT-X-ALLOW-CACHE:NO
    #EXT-X-VERSION:2
    #EXT-X-FAXS-CM:URI="xxxxxxxx"
    #EXT-X-KEY:METHOD=xxxxxxx
    #EXT-X-TARGETDURATION:8
    #EXTINF:6,
    477000.ts
    #EXTINF:8,
    477001.ts
    #EXTINF:8,
    477002.ts
    #EXTINF:8,
    477003.ts
    #EXTINF:8,
    477004.ts
    #EXTINF:8,
    477005.ts
    #EXTINF:8,
    477006.ts
Run Code Online (Sandbox Code Playgroud)

问题是在实时播放列表中,每个片段的#EXT-X-TARGETDURATION 和#EXTINF 是否必须相等?!我找不到来自 Apple 的任何文件来定义此规则。在本文档中,https://developer.apple.com/library/ios/technotes/tn2288/_index.html
Lie Playlist 示例,它们都是相同的。

jms*_*msn 5

简短的回答:没有。

无论是直播还是 VOD,EXT-X-TARGETDURATION指定播放列表中片段的最长持续时间。由指定的实际持续时间EXTINF可能会更少。在 HLS 草案 [1] 中,它说:

EXT-X-TARGETDURATION 标签指定最大媒体段持续时间。Playlist 文件中每个 Media Segment 的 EXTINF 持续时间,当四舍五入到最接近的整数时,必须小于或等于目标持续时间;较长的片段可能会触发播放停顿或其他错误。

我阅读错误的方式

Media Entry 时间值与 MEDIA-SEQUENCE 477000 的先前播放列表不匹配:8.000000 与 6.000000

EXTINF对于序列号为 477000 的特定片段,477000.ts 即在前一个播放列表中为 8.000000,而在刚刚切换到的播放列表中为 6.000000。AFAIK 没有规定要求这些持续时间相等。也许玩家由于某种原因无法处理这个。

您可以使用 Apple 的 MediaStreamValidator [2] 命令行工具测试 HLS 流的一致性。它将显示流可能存在的任何问题。

[1] https://tools.ietf.org/html/draft-pantos-http-live-streaming-19#section-4.3.3.1

[2] https://developer.apple.com/library/ios/technotes/tn2235/_index.html