在后台队列上创建和销毁AVFoundation类?

时间:2013-08-23 01:08:17

标签: ios multithreading avfoundation avplayer

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

2 个答案:

答案 0 :(得分:2)

以下肯定会影响滚动性能

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

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

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

答案 1 :(得分:-1)

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

更重要的是,尽管在主线程上做得更少有好处,但分配AVPlayerAVPlayerItemAVURLAsset并不会成为你的瓶颈需要担心。相反,你应该运行仪器并找到真正的性能问题,而是专注于那些。