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
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.
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.
- 1. Tworzenie/niszczenie klas wirtualnych w delphi
- 2. AVfoundation rozmycie tła w Wideo
- 3. dynamiczne tworzenie i niszczenie rejestratorów logów
- 4. Wywoływanie i niszczenie Unity3D
- 5. Dynamicznie tworzenie klas w python i __repr__
- 6. Tworzenie klas dynamicznych w SQLAlchemy
- 7. Tworzenie Gwiaździstego tła w CSS
- 8. Niszczenie obiektów w Ember.js
- 9. Tworzenie diagramu klas automatycznie
- 10. Tworzenie diagramu klas C++
- 11. Niszczenie WebWorkers
- 12. Niszczenie plików w .NET
- 13. Ponowne tworzenie klas standardowych
- 14. Dynamicznie tworzenie klas - Python
- 15. __copy_helper_block_ crash w AVFoundation
- 16. niszczenie funkcji w javascript (jquery)
- 17. CSS: Tworzenie tła z teksturą
- 18. Jak synchronizować zadania w różnych kolejkach wysyłkowych?
- 19. Wykrywanie upuszczonych wiadomości w kolejkach ZeroMQ
- 20. Prawidłowy sposób na tworzenie klas w JavaScript?
- 21. Niszczenie jQuery Flot Graph
- 22. "wybierz" w wielu kolejkach wieloprocesorowych Pythona?
- 23. Niszczenie głębokich właściwości
- 24. Tworzenie klas dynamicznych w języku C#
- 25. Tworzenie klas dynamicznych w Jade/Pug
- 26. Niszczenie obiektu PyCapsule
- 27. AvFoundation - Jak podłączyć AVCaptureSession i AVAssetWriter?
- 28. Najlepsza praktyka przetwarzania wielowątkowych wiadomości w kolejkach JMS
- 29. Klasa upraszczająca tworzenie wątków tła i synchronizację wątków interfejsu użytkownika
- 30. AVFoundation Reverse Video
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
@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
@ 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