AVPlayerItem即使其状态为“readyToPlay”且“isPlaybackLikelyToKeepUp”为真,也不播放视频

时间:2016-10-31 23:32:22

标签: ios avplayer avplayeritem

我正在使用AVPlayerAVPlayerItem播放实时视频。我正在观察AVPlayerItem statusisPlaybackLikelyToKeepUpAVPlayerItemPlaybackStalled。我也在观察AVPlayer rate

在我测试的过程中,我发现真的很奇怪。

虽然AVPlayer正常播放视频(AVPlayerItem.status == readyToPlayAVPlayerItem.isPlaybackLikelyToKeepUp == true),但如果按主页按钮,则AVPlayer.rate会变为0.0。这意味着玩家停止了比赛。

当应用程序返回前台并按下播放按钮时,它仍然是AVPlayerItem.status == readyToPlayAVPlayerItem.isPlaybackLikelyToKeepUp == true但暂停了一段时间后它开始播放。

我想要的是知道播放器已暂停或正在播放。在这种情况下,即使播放器没有播放视频,状态也表示正在播放。 (AVPlayerItem.status == readyToPlayAVPlayerItem.isPlaybackLikelyToKeepUp == trueAVPlayer.rate == 1.0

我检查了AVPlayerItem' loadedTimeRangesitem.loadedTimeRanges.first不是nil(loadedTimeRanges只有一个项目),其startduration是不是0。

我应该检查什么?

我正在添加更多内容。

此症状仅在流式传输(m3u8)而非vod(mp4)时发生。

所以我猜这是缓冲数据的问题。当播放器正在播放时,缓冲区有数据可播放且数据仍然有效。在应用程序进入后台并返回前台后,播放器的缓冲区仍然包含isPlaybackLikelyToKeepUp == trueAVPlayerItem.status == readyToPlay的数据。但是当我尝试播放时,AVPlayer会刷新缓冲区,因为它已经过时了。

看起来目前为止唯一的方法是创建新的AVPlayerItem并在应用返回前景时进行设置。

我遇到的确切问题是什么,并想知道如何避免它。

这是我正在处理的回购。

https://github.com/trick14/SLPlayer

上面一个是现场,下面一个是VOD。加载完成后,播放并前往背景和前景几次。如果你尝试玩,所有状态看起来都很正常,但玩家会停滞不前。

1 个答案:

答案 0 :(得分:0)

我很久以前也有类似的经历。 那时,当用户按下主页按钮时,我已经存储了播放状态和播放位置。 当返回前台时,我使用存储的信息来恢复或播放该位置。

我希望你能提供帮助。