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