我正在开发一个视频库,我有一个内部有多个 View 的 ScrollView,每个 View 都有一个 AVPlayer - 我猜到目前为止它是非常标准的。请注意,所有 AVPlayer 都预加载了他们的视频,等待播放。
当我在画廊中有很多项目(视频)时,就会出现问题。在任何给定时间 - 仅显示其中的 16 个,从头到尾,其余显示黑屏。 如果我颠倒项目的顺序 - 显示新一侧的其他 16 个,其余的也显示黑屏。
此外,如果我转到另一个屏幕然后返回画廊 - 一切都变黑了,什么也没有显示。
如果我为每个 View 用随机颜色背景替换玩家 - 将显示所有 View 。所以我认为问题出在球员身上,而不是观点本身。
根据 Xcode,我的应用程序仅使用 ~7-10% CPU 和 ~10-11 MB RAM,因此它看起来不像是性能问题 - 更像是并发事件 AVPlayer 的限制,但我找不到任何相关信息。
有人有什么建议吗?这让我发疯。
提前致谢!
最佳答案
我在不同的上下文中遇到了与您相同的问题(我有一个加载视频的表格 View ,但在点击 16 次后它停止工作)。
这些是帮助我解决问题的一些线索:
AVPlayer crashes after multiple playbacks-
AVPlayerItem fails with AVStatusFailed and error code "Cannot Decode"
How to close previous AVPlayer and AVPlayerItem
基本上可以创建 16 个 avplayer/avplayerlayer 的硬性限制。如果你试图超过这个,你会得到不稳定的行为。
在您的特定情况下,您必须创建一个包含 16 个视频的缓冲区并删除/添加它们,因为它们在 ScrollView 中不再可见。我建议降低缓冲区(如 8),因为 16 会导致最新的 iPhone 型号出现严重滞后。
要删除播放器,请使用此代码:
player.pause()
player = nil
playerLayer.removeFromSuperlayer()
确保播放器是一个变量(不要使用 let)并且它是一个可选类型。
var player : AVPlayer? = AVPlayer(url: videoURL as URL)
希望对你有帮助
关于ios - UIScrollView 中的多个 AVPlayer - 只显示了其中的 16 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27071045/