2013-08-23 11 views
6

Próbuję wyeliminować niektóre trafienia wydajności wątku głównego, które występują podczas przydzielania AVPlayer, AVPlayerItem i AVURLAsset w wątku głównym. Czy ktoś miał doświadczenie w przenoszeniu przydzielania/zwalniania tych obiektów do wątku tła? Podobnie, czy bieżący element AVPlayer może być ustawiony w kolejce tła?Tworzenie i niszczenie klas AVFoundation w kolejkach tła?

Odpowiedz

-1

Ogólnie rzecz biorąc, jeśli nie jest to udokumentowane jako bezpieczne w wątku w dokumentacji klas, nie należy używać obiektu tej klasy w wielu wątkach.

Więcej do punktu, natomiast istnieje korzyść robi mniej w głównym wątku, przeznaczając AVPlayer, AVPlayerItem i AVURLAsset „s nigdy nie będzie praktycznie być wąskie gardło, które trzeba się martwić. Zamiast tego należy uruchomić Instrumenty i znaleźć rzeczywiste problemy z wydajnością, a zamiast tego skupić się na nich.

+2

Uważam, że tak nie jest. Przydzielanie elementu AVPlayer za pomocą adresu URL ma tendencję do spowalniania przewijania - nawet jeśli jest wykonywane w wątku tła. Dokładnie, dlaczego tak się dzieje, nie jestem jeszcze pewien. – rob

+0

@rob jest poprawny. Zyskujesz zauważalne uderzenie podczas przewijania wydajności, próbując zrobić to wszystko. Rob, czy kiedykolwiek zrobiłeś postępy w tej sprawie? – user3344977

+0

@ user3344977 Znalazłem, że mogę złagodzić, ale nie naprawić wydajność przewijania, umieszczając wszystko, co mogłem, na wątkach w tle. (Samo przydzielenie AVA trwało do 30 ms na moim iPhonie 6.) Wykonałem także test, w którym użyłem minimalnego filmu wideo, który był <1k i załadowany na urządzenie, a to nie miało znaczenia - to znaczy zmniejszenie rozmiaru pliku wideo i ładowanie z dysku nie poprawiło wydajności przewijania. Wygląda na to, że podczas uruchamiania filmu jest nieuniknione ~ 15ms zablokowania głównego wątku. Nadal nie wiem, co to jest - profilowanie czasu nie było zbyt pomocne. – rob

2

Poniższa pewno boli wydajności przewijania

  • Tworzenie AVPlayer, 10 fps drop
  • Dodanie gracza do AVPlayerLayer, 15 fps drop
  • rozpocząć odtwarzanie, 15/25 fps drop
  • Pause Play , 15 klatek na sekundę drop
  • Deallocate AVPlayer, 20+ klatek na sekundę drop

Próbowałem z alokacją AVPlayer z wątku tła, jednak AVFoundation przełączy się z powrotem do głównej i wykonać alokację/inicjalizację z głównej. To samo dotyczy odtwarzania/pauzy.

Mam pewne sukcesy z dealokowaniem AVPlayer/AVPlayerItem na wątku tła. Zasadniczo musisz usunąć ostatnie odwołanie do AVPlayer z wątku w tle.