我正在尝试播放一个非常简单的直播播放列表(没有变体,只有两个片段),并且无法从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
丢失时,持续时间将不会显示,视频将在最后一帧冻结(加载状态为“staled”,播放状态为“播放”)。
当存在#EXT-X-ENDLIST
时,会显示(预期)持续时间,并且视频将使用QuickTime徽标停止在默认背景(加载状态为“已停止”,播放状态为“已暂停”)。
但是,当播放列表在播放期间实时更新以包含#EXT-X-ENDLIST
时,我可以看到它在网络服务器日志中重新加载,但播放器没有意识到视频已经完成,因此它的行为类似于#1 。这是一个问题,因为我无法在UI中指示流已完成。
问题仅在于结束标记,在重新加载时会正确检测到其他段。
当玩家决定完成缓冲时没有一致性。当我只有一个片段可用时,播放不会立即开始,但是当我有2个或更多片段时,它将连续播放所有片段并停止播放。如何只用1段开始播放?这是一个问题,因为它会产生额外的播放开始延迟。
当没有片段时,它将永久停留在“播放”状态的黑屏。它不会结束播放,不会更改状态,也不会重新加载播放列表。
对于未完成的流,有时候玩家HUD会显示空白时间--:-- o----- --:--
,有时候--:-- o----- Live
,似乎只要感觉就好了。
我想知道它接受的播放列表是否有些怪癖,或者MPMoviePlayerController
是否是正确的工具。我可以让它表现出来吗?我应该直接跳到AVPlayer
以获得一致的播放体验吗?
答案 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