6

我试图消除在主线程上分配 AVPlayer、AVPlayerItem 和 AVURLAsset 时发生的一些主线程性能问题。有没有人有将这些对象的分配/释放移动到后台线程的经验?同样,可以在后台队列中设置 AVPlayer 的 currentItem 吗?

4

2 回答 2

2

以下肯定会损害滚动性能

  • 创建 AVPlayer, 10 fps drop
  • 将播放器添加到 AVPlayerLayer,15 fps 下降
  • 开始播放,15/25 fps 下降
  • 暂停播放,15 fps 下降
  • 取消分配 AVPlayer,20+ fps 下降

我尝试从后台线程分配 AVPlayer,但是,AVFoundation 将切换回主线程并从主线程执行分配/初始化。与播放/暂停相同。

我在后台线程上解除分配 AVPlayer/AVPlayerItem 取得了一些成功。基本上,您需要从后台线程中清除对 AVPlayer 的最后引用。

于 2016-03-26T00:21:02.083 回答
-1

一般来说,如果在类文档中没有记录它是线程安全的,则不应在多个线程中使用该类的对象。

更重要的是,虽然在主线程上做更少的事情是有好处的,但分配AVPlayer,AVPlayerItemAVURLAsset's 实际上永远不会成为您需要担心的瓶颈。相反,您应该运行 Instruments 并找到真正的性能问题,然后专注于这些问题。

于 2013-08-23T05:32:20.060 回答