【问题标题】:Live playlist, must #EXT-X-TARGETDURATION and #EXTINF be equal?直播播放列表,#EXT-X-TARGETDURATION 和 #EXTINF 必须相等吗?
【发布时间】:2016-11-16 01:00:37
【问题描述】:

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

Error Domain=CoreMediaErrorDomain Code=-12312 \"媒体入口时间值 与 MEDIA-SEQUENCE 477000 的先前播放列表不匹配:8.000000 vs 6.000000\" UserInfo={NSDescription=媒体入口时间值不 匹配 MEDIA-SEQUENCE 477000 的先前播放列表:8.000000 vs 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

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

【问题讨论】:

    标签: ios avplayer http-live-streaming


    【解决方案1】:

    简短回答:不。

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

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

    我阅读错误的方式

    媒体入口时间值与之前的播放列表不匹配 媒体序列 477000:8.000000 与 6.000000

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

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

    【讨论】:

    • 关于'segments in the playlist',VOD是静态的,Live是动态的,所以对于Live来说,'segments in the playlist'是变化的,所以我们需要每次更新播放列表时计算 Max Duration,对吗?
    • @workplaylifecycle HLS 规范实际上声明了The value of the EXT-X-TARGETDURATION tag in the Media Playlist MUST NOT change.,这意味着您不能添加比该标记的当前值更长的段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-27
    • 2012-01-12
    • 2012-10-06
    • 1970-01-01
    • 2012-11-18
    • 2013-04-07
    相关资源
    最近更新 更多