Ios M3U8 URL的MPMoviePlayerController行为异常

Ios M3U8 URL的MPMoviePlayerController行为异常,ios,video,mpmovieplayercontroller,http-live-streaming,Ios,Video,Mpmovieplayercontroller,Http Live Streaming,我正在尝试播放一个非常简单的实时播放列表(没有变体,只有两个片段),无法从MPMoviePlayerController中获得理智的行为 #EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:10 #EXT-X-MEDIA-SEQUENCE:0 #EXTINF:10.0, 1.ts #EXTINF:10.0, 2.ts #EXT-X-ENDLIST 当#EXT-X-ENDLIST缺失时,将不显示持续时间,视频将在最后一帧冻结(加载状态为“过时”,播放状态

我正在尝试播放一个非常简单的实时播放列表(没有变体,只有两个片段),无法从
MPMoviePlayerController
中获得理智的行为

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10.0,
1.ts
#EXTINF:10.0,
2.ts
#EXT-X-ENDLIST
  • #EXT-X-ENDLIST
    缺失时,将不显示持续时间,视频将在最后一帧冻结(加载状态为“过时”,播放状态为“播放”)

    当出现
    #EXT-X-ENDLIST
    时,将(预期)显示持续时间,视频将在默认背景下停止,并带有QuickTime徽标(加载状态为“暂停”,播放状态为“暂停”)

    但是,当播放列表在播放过程中实时更新为包含
    #EXT-X-ENDLIST
    时,我可以在web服务器日志中看到它被重新加载,但播放机没有意识到视频已经完成,因此它的行为类似于#1。这是一个问题,因为我无法在UI中指示流已完成

    问题只存在于结束标记,重新加载时会正确检测到其他段

  • 当玩家决定缓冲完成时,没有一致性。当我只有一个片段可用时,播放不会立即开始,但当我有两个或更多片段时,它将连续播放所有片段并暂停。我怎样才能让它只播放一段?这是一个问题,因为它会产生额外的播放开始延迟

  • 当没有片段时,它将永远被黑屏卡在“播放”状态。它不会结束播放,不会更改状态,也不会重新加载播放列表

  • 对于未完成的流,有时播放器HUD会显示空白时间
    :--o-------:--
    ,有时会显示
    :--o---Live
    ,似乎在任何时候都可以


  • 我想知道它在接受哪些播放列表方面是否有一些怪癖,或者
    MPMoviePlayerController
    首先是否是一个正确的工具。我能让它规矩点吗?我是否应该直接跳到AVPlayer以获得一致的播放体验?

    事实证明,最糟糕的不良行为(#1,部分#2)是由于
    .ts
    段没有正确设置时间戳。每个段都需要将其开始时间戳设置为所有先前段的持续时间之和,例如:

    start  duration
    00:00  00:03
    00:03  00:03
    00:06  00:03
    
    而错误的顺序看起来像:

    start  duration
    00:00  00:03
    00:00  00:03
    00:00  00:03
    

    事实上,AVPlayer由MPMoviePlayerController使用,只是对用户完全透明。如果在直接使用AVPlayer时,解析流时出现的问题(如您所述)会发生变化,我会感到惊讶。你试过了吗?