ios - UIScrollView 中的多个 AVPlayer - 只显示了其中的 16 个

标签 ios objective-c swift scrollview avplayer

我正在开发一个视频库,我有一个内部有多个 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

Impossible to stop AVPlayer .

基本上可以创建 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/

相关文章:

ios - 如何使用 UIView 框架创建自定义初始化

ios - 我如何让我的 UIView 使用我的自定义 CALayer 作为其支持层?

objective-c - 每十秒检查一次后台状况并发送通知

ios - UIKit 问题 - 在 IBOutlet 项目上设置颜色需要花费大量时间

ios - 以编程方式添加的 UITableView 不会填充数据

ios - 使用 NSURLSession 发出 http DELETE 请求

ios - https 足以保护登录数据吗?

ios - 在 flickrSearchURLForSearchTerm 中发现 nil

objective-c - iOS - 从 UITableView 中删除行不会设置动画

ios - 在 Collection View 中不失真地显示图像的正确方法是什么