AVPlayerItem即使状态为“ readyToPlay”且“ isPlaybackLikelyToKeepUp”为true也不会播放视频

Rya*_*yan 5 ios avplayer avplayeritem

我正在使用AVPlayer和播放实时视频AVPlayerItem。我观察AVPlayerItemstatusisPlaybackLikelyToKeepUpAVPlayerItemPlaybackStalled。我还观察到AVPlayerrate

在测试时,我发现确实发生了奇怪的事情。

AVPlayer正常播放视频(AVPlayerItem.status == readyToPlayAVPlayerItem.isPlaybackLikelyToKeepUp == true)的同时,如果按主屏幕按钮,该按钮将AVPlayer.rate变为0.0。这意味着玩家停止了游戏。

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

我想知道播放器已暂停或正在播放。在这种情况下,即使播放器未在播放视频,状态也会指示其正在播放。(AVPlayerItem.status == readyToPlayAVPlayerItem.isPlaybackLikelyToKeepUp == trueAVPlayer.rate == 1.0

我检查AVPlayerItemloadedTimeRangesitem.loadedTimeRanges.first不为零(loadedTimeRanges只有一个项目)及其startduration不为0。

我应该检查什么?

我要补充一点。

此症状仅在流式(m3u8)上发生,而在vod(mp4)上不发生。

所以我想这是缓冲数据的问题。播放器正在播放时,缓冲区中有数据要播放,并且数据仍然有效。应用背景去,回到前台后,玩家的缓冲仍然有数据,所以isPlaybackLikelyToKeepUp == trueAVPlayerItem.status == readyToPlay。但是,当我尝试播放时,会AVPlayer刷新缓冲区,因为它很旧。

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

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

这是我正在处理的仓库。

https://github.com/trick14/SLPlayer

上面的是直播,下面的是VOD。加载完成后,播放并转到背景和前景两次。而且,如果您尝试玩游戏,则所有状态看起来都很正常,但玩家却停滞了。

小智 0

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

我希望你能有所帮助。