使用M3U8 URL的不稳定MPMoviePlayerController行为

时间:2014-08-20 16:35:02

标签: 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
  1. #EXT-X-ENDLIST丢失时,持续时间将不会显示,视频将在最后一帧冻结(加载状态为“staled”,播放状态为“播放”)。

    当存在#EXT-X-ENDLIST时,会显示(预期)持续时间,并且视频将使用QuickTime徽标停止在默认背景(加载状态为“已停止”,播放状态为“已暂停”)。

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

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

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

  3. 当没有片段时,它将永久停留在“播放”状态的黑屏。它不会结束播放,不会更改状态,也不会重新加载播放列表。

  4. 对于未完成的流,有时候玩家HUD会显示空白时间--:-- o----- --:--,有时候--:-- o----- Live,似乎只要感觉就好了。

  5. 我想知道它接受的播放列表是否有些怪癖,或者MPMoviePlayerController是否是正确的工具。我可以让它表现出来吗?我应该直接跳到AVPlayer以获得一致的播放体验吗?

1 个答案:

答案 0 :(得分:0)

事实证明,最糟糕的不良行为(#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