Sto cercando di eliminare alcuni hit di prestazioni Main Thread che si verificano quando alloco AVPlayer, AVPlayerItem e AVURLAsset sul thread principale. Qualcuno ha avuto esperienza con lo spostamento/allocazione di questi oggetti su un thread in background? Allo stesso modo, l'elemento corrente di AVPlayer può essere impostato su una coda di sfondo?Creazione e distruzione di classi AVFoundation su code in background?
risposta
In generale, se non è documentato come thread-safe nella documentazione delle classi, non si dovrebbe usare un oggetto di quella classe su più thread.
Più precisamente, mentre c'è un beneficio a fare meno sul thread principale, assegnando AVPlayer
, AVPlayerItem
e AVURLAsset
's non potrà mai essere praticamente un collo di bottiglia che avete bisogno di preoccuparsi. Invece, dovresti eseguire gli strumenti e trovare problemi di prestazioni reali e concentrarti su quelli.
Di seguito vi sicuramente male scorrimento prestazioni
- Creazione AVPlayer, 10 fps cadere
- Aggiunta giocatore di AVPlayerLayer, 15 fps cadere
- gioco Start, 15/25 fps cadere gioco
- Pausa , 15 fps goccia
- Dealloca AVPlayer, 20+ fps goccia
Ho provato ad allocare AVPlayer da un thread in background, tuttavia, AVFoundation tornerà al main ed eseguirà l'allocazione/inizializzazione dal main. Lo stesso con play/pause.
Ho avuto qualche successo con la deallocazione di AVPlayer/AVPlayerItem su un thread in background. Fondamentalmente è necessario cancellare l'ultimo riferimento ad AVPlayer dal thread in background.
- 1. Creazione e distruzione sicura delle sessioni di accesso in PHP
- 2. Creazione classe virtuale/distruzione in delphi
- 3. creazione e distruzione dinamiche degli allegati di registrazione
- 4. Creazione di blocchi/moduli in Code Igniter
- 5. Creazione dialogo pin-code
- 6. Distruzione di forme e Compojure?
- 7. Creazione del servizio in background in Android
- 8. Creazione dinamica di classi in python e __repr__
- 9. Creazione di classi Core Foundation
- 10. Creazione di classi dinamicamente in matlab
- 11. Miscelazione di immagini e video utilizzando AVFoundation
- 12. __copy_helper_block_ crash in AVFoundation
- 13. Elaborazione code e code di database
- 14. Creazione di classi C# a runtime
- 15. C++, creazione di classi in runtime
- 16. Creazione dinamica di code di messaggi asincroni in Java
- 17. Distruzione in Node.JS
- 18. Rails Creazione di un nuovo thread o processo in background
- 19. Thread in background ASP.Net MVC per la creazione e l'invio di e-mail
- 20. Code folding in RStudio: creazione di gerarchia nel codice
- 21. Creazione di un PDF da un report RDLC in background
- 22. Ricevi notifica di smaltimento/distruzione di oggetti
- 23. Creazione classi Java con JaxB
- 24. Perché le classi Code First richiedono proprietà di navigazione?
- 25. Simulazione di attività in background su AppHarbor
- 26. AvFoundation - Come connettere AVCaptureSession e AVAssetWriter?
- 27. Creazione di classi con molte funzioni importate qui e là
- 28. "java.net.BindException: Indirizzo già in uso" durante il tentativo di creazione rapida di Socket e distruzione per test di carico
- 29. C++ Soppressione Inizializzazione e distruzione automatiche
- 30. Primo fotogramma di un video utilizzando AVFoundation
Sto trovando che questo non è il caso. L'allocazione di un elemento di AVPlayer con un URL tende a rallentare le prestazioni di scorrimento, anche se eseguite su un thread in background. Esattamente perché questo accade non ne sono ancora sicuro. – rob
@rob è corretto. Ottieni un notevole successo nello scorrimento delle prestazioni quando provi a fare tutto questo lavoro. Rob, hai mai fatto progressi su questo problema? – user3344977
@ user3344977 Ho scoperto che potevo mitigare ma non correggere le prestazioni di scorrimento mettendo tutto il possibile sui thread in background. (L'allocazione di AVA da sola richiedeva fino a 30ms sul mio iPhone 6.) Ho anche fatto un test in cui ho usato un video minimo di <1k e caricato sul dispositivo, e questo non ha fatto alcuna differenza - cioè, riducendo la dimensione del file video e il caricamento dal disco non ha migliorato le prestazioni di scorrimento. Sembra che ci sia un inevitabile blocco di ~ 15ms del thread principale quando si avvia un film. Non so ancora cosa sia - il profiling temporale non è stato di grande aiuto. – rob