【问题标题】:Erratic MPMoviePlayerController behaviour with M3U8 URLs带有 M3U8 URL 的不稳定 MPMoviePlayerController 行为
【发布时间】:2014-08-20 16:35:01
【问题描述】:

我正在尝试播放一个非常简单的现场播放列表(没有变体,只有两个片段)并且无法从 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”,播放状态“playing”)。

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

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

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

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

  3. 当没有片段时,它会在“播放”状态下永久卡住黑屏。它不会结束播放,不会改变状态,也不会重新加载播放列表。

  4. 对于未完成的流,有时玩家 HUD 会显示空白时间--:-- o----- --:--,有时会显示--:-- o----- Live,似乎随时都可以。

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

【问题讨论】:

  • AVPlayer 实际上由 MPMoviePlayerController 使用,对用户完全透明。如果直接使用 AVPlayer 解析流时发生的问题(如您所描述的)会改变,我会感到惊讶。你试过Apple's validation tool吗?

标签: ios video mpmovieplayercontroller http-live-streaming


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-12-28
    • 2019-11-07
    • 2010-12-12
    • 1970-01-01
    • 2015-10-27
    • 2011-01-27
    • 2019-08-02
    • 1970-01-01
    • 2012-04-24
    相关资源
    最近更新 更多