UIScrollView中的多个AVPlayers – 仅显示其中的16个

我正在开发一个video库,我有一个ScrollView,里面有多个视图,每个视图都有一个AVPlayer – 到目前为止它是相当标准的我猜。 请注意,所有AVPlayer都预装了他们的video,等待播放。

当我在库中有很多项目(video)时会出现问题。 在任何给定时间 – 只显示其中的16个,从开始到结束,其余显示黑屏。 如果我正在颠倒项目的顺序 – 显示新侧的其他16个,其余的也显示黑色屏幕。

此外,如果我去另一个屏幕,然后回到画廊 – 一切都变黑了,什么都没有显示。

如果我用每个视图的随机颜色背景替换玩家 – 将显示所有视图。 所以我认为问题在于玩家而不是观点本身。

根据Xcode我的应用程序只使用~7-10%的CPU和~10-11 MB的RAM,所以它看起来不像是一个性能问题 – 更像是并发有效AVPlayers的限制,但我找不到任何关于它的信息。

有没有人有什么建议? 这真让我抓狂。

提前致谢!

我在不同的环境中遇到了与你相同的问题(我有一个加载video的tableview,它在16次点击后停止工作)。

这些是帮助我的一些主题:

多次播放后AVPlayer崩溃 –

AVPlayerItem失败,AVStatusFailed,错误代码“无法解码”

如何关闭以前的AVPlayer和AVPlayerItem

无法阻止AVPlayer 。

从本质上讲,可以创建16个avplayers / avplayerlayers的硬限制。 如果你试图超过这个,你会得到不稳定的行为。

在您的特定情况下,您将不得不创建一个包含16个video的缓冲区并删除/添加它们,因为它们在滚动视图中不再可见。 我建议将缓冲区降低(如8)导致16导致最新的iphone型号出现严重滞后。

要删除播放器,请使用以下代码:

player.pause() player = nil playerLayer.removeFromSuperlayer() 

确保播放器是变量(不要使用let)并且它是可选类型。

 var player : AVPlayer? = AVPlayer(url: videoURL as URL) 

希望这可以帮助