我正在开发一个视频库,我有一个ScrollView,里面有多个视图,每个视图都有一个AVPlayer - 到目前为止,我认为它非常标准。请注意,所有AVPlayer都预装了他们的视频,等待播放。
当我在图库中有很多项目(视频)时会出现问题。在任何给定时间 - 只显示其中的16个,从开始到结束,其余显示黑屏。 如果我反转项目的顺序 - 显示新方面的其他16个,其余的则显示黑屏。
此外,如果我转到另一个屏幕,然后回到画廊 - 一切都变黑了,没有任何显示。
如果我用每个视图的随机颜色背景替换玩家 - 将显示所有视图。所以我认为问题在于玩家而不是观点本身。
根据Xcode,我的应用只使用~7-10%的CPU和~10-11 MB的RAM,所以它看起来不像是一个性能问题 - 更像是并发有源AVPlayers的限制,但我不能&#39 ;找到有关该信息的任何信息。
有没有人有任何建议?这让我发疯了。
提前致谢!
答案 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
基本上可以创建16个avplayers / avplayerlayers的硬限制。如果你试图超过这个,你会得到不稳定的行为。
在您的特定情况下,您必须创建一个包含16个视频的缓冲区并删除/添加它们,因为它们在滚动视图中不再可见。我建议将缓冲区降低(如8)导致16导致最新iphone型号出现严重滞后。
要删除播放器,请使用以下代码:
player.pause()
player = nil
playerLayer.removeFromSuperlayer()
确保播放器是变量(不要使用let)并且它是可选类型。
var player : AVPlayer? = AVPlayer(url: videoURL as URL)
希望这有帮助