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

时间:2014-11-21 21:55:56

标签: ios objective-c swift scrollview avplayer

我正在开发一个视频库,我有一个ScrollView,里面有多个视图,每个视图都有一个AVPlayer - 到目前为止,我认为它非常标准。请注意,所有AVPlayer都预装了他们的视频,等待播放。

当我在图库中有很多项目(视频)时会出现问题。在任何给定时间 - 只显示其中的16个,从开始到结束,其余显示黑屏。 如果我反转项目的顺序 - 显示新方面的其他16个,其余的则显示黑屏。

此外,如果我转到另一个屏幕,然后回到画廊 - 一切都变黑了,没有任何显示。

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

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

有没有人有任何建议?这让我发疯了。

提前致谢!

1 个答案:

答案 0 :(得分:1)

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

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

AVPlayer crashes after multiple playbacks-

AVPlayerItem fails with AVStatusFailed and error code "Cannot Decode"

How to close previous AVPlayer and AVPlayerItem

Impossible to stop AVPlayer

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

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

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

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

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

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

希望这有帮助