iOS AVPlayer replaceCurrentItemWithPlayerItem:nil block UI Thread

Кажется, что API replaceCurrentItemWithPlayerItem: задержит основной поток на несколько секунд, я понимаю, что для замены элемента требуется информация о новом элементе, предварительная загрузка которого может занять некоторое время. Но возникают вопросы: почему replaceCurrentItemWithPlayerItem: с нулевым объектом также застревает в основном потоке?? У меня бывает, что иногда замена нулевого playerItem занимает более 5 секунд. Интересно, что я могу сделать, чтобы избежать этой проблемы. Спасибо за любые советы!


person zoww    schedule 03.12.2015    source источник


Ответы (1)


Я столкнулся с похожей проблемой блокировки потока пользовательского интерфейса, когда использовал UICollectionView для отображения и предварительного просмотра видео в локальной библиотеке фотографий через ALAssetLibrary.

Прокрутка при переключении видео происходит не плавно, поэтому я предполагаю, что какой-то метод блокирует поток пользовательского интерфейса. Затем использую Core Animation из Instruments для анализа того, что именно занимает поток пользовательского интерфейса. В Time Profiler я обнаружил, что replaceCurrentItemWithPlayerItem нужно около 30 мс. для выполнения в основном потоке, что более 16 мс (1000/60 (fps)) приводит к прерывистой прокрутке.

Чтобы решить проблему, сначала я попытался поместить replaceCurrentItemWithPlayerItem в фоновый поток с помощью GCD, но это не сработало. Я не уверен, что это связано с тем, что самому Cocoa требуется обновить пользовательский интерфейс при вызове replaceCurrentItemWithPlayerItem, что означает, что поток пользовательского интерфейса все еще блокируется . Наконец, я заставил это работать, поместив replaceCurrentItemWithPlayerItem в конец прокрутки (делегат func scrollViewDidEndDecelerating(scrollView: UIScrollView)). Теперь прокрутка плавная, да!

Поэтому мой совет очевиден: Использование инструментов для анализа того, что именно занимает поток пользовательского интерфейса.

person Xingxing    schedule 18.05.2016
comment
Спасибо дружище, ты спас мой день :D - person Massimo Polimeni; 09.03.2017