gpt4 book ai didi

iOS AVPlayer replaceCurrentItemWithPlayerItem :nil block UI Thread

转载 作者:可可西里 更新时间:2023-11-01 02:58:09 29 4
gpt4 key购买 nike

似乎 api replaceCurrentItemWithPlayerItem: 会卡住主线程几秒钟,我知道替换项目需要新项目的信息,这可能需要一些时间来预加载。但是问题来了,为什么用 nil item object 替换 CurrentItemWithPlayerItem: 也会卡住主线程?我碰巧有时需要超过 5 秒来替换一个 nil playerItem。我想知道我该怎么做才能避免这个问题。感谢您的任何建议!

最佳答案

当我使用 UICollectionView 通过 ALAssetLibrary 显示和预览本地照片库中的视频时,我遇到了类似的阻塞 UI 线程问题。

切换视频时滚动不流畅,估计是某些方法阻塞了UI线程。然后我用InstrumentsCore Animation分析到底是什么占用了UI 线程。在 Time Profiler 中,我发现 replaceCurrentItemWithPlayerItem 需要大约 30ms 才能在主线程中执行,这超过 16ms (1000/60(fps )) 导致滚动不稳定。

为了解决这个问题,首先我尝试使用 GCD 将 replaceCurrentItemWithPlayerItem 放入后台线程,但是它不起作用。我不确定是不是因为 Cocoa 本身在调用时需要更新 UI replaceCurrentItemWithPlayerItem,这意味着 UI 线程仍然是阻塞的。最后我通过将 replaceCurrentItemWithPlayerItem 放在滚动端使其工作(委托(delegate) func scrollViewDidEndDecelerating(scrollView: UIScrollView) )。现在滚动很流畅,是的!

因此,我的建议很明显:使用 Instruments 分析究竟是什么占用了 UI 线程

关于iOS AVPlayer replaceCurrentItemWithPlayerItem :nil block UI Thread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34068604/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com