首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIScrollView中有多个AVPlayers -仅显示其中的16个

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

Stack Overflow用户
提问于 2014-11-22 05:55:56
回答 1查看 1.8K关注 0票数 5

我正在开发一个视频画廊,我有一个里面有多个视图的ScrollView,每个视图都有一个AVPlayer -到目前为止我想这是相当标准的。请注意,所有的AVPlayers都预先加载了它们的视频,等待播放。

当我的图库中有许多项目(视频)时,就会出现问题。在任何给定的时间-只显示其中的16个,从头到尾,其余的显示一个黑屏。如果我颠倒了项目的顺序--显示了来自新边的其他16个项目,其余的项目也显示了一个黑屏。

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

如果我用每个视图的随机颜色背景替换播放器-所有的视图都会显示出来。所以我认为问题出在玩家身上,而不是视图本身。

根据Xcode的说法,我的应用程序只使用了~7-10%的CPU和~10-11MB的内存,所以它看起来不像是一个性能问题--更像是并发active AVPlayers的限制,但我找不到任何关于这方面的信息。

有人有什么建议吗?我都快疯了。

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 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

Impossible to stop AVPlayer

基本上,可以创建的avplayer/avplayerlayer的硬限制是16个。如果你试图超越这一点,你就会得到不可靠的行为。

在您的特殊情况下,您必须创建一个包含16个视频的缓冲区,并删除/添加它们,因为它们在滚动视图上不再可见。我建议降低缓冲(如8),因为16在最新的iphone机型上会导致一些严重的延迟。

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

代码语言:javascript
复制
player.pause()
player = nil
playerLayer.removeFromSuperlayer()

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

代码语言:javascript
复制
var player : AVPlayer?  = AVPlayer(url: videoURL as URL)

希望这能有所帮助

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27071045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档