2012-03-23 13 views
8

Attualmente sto sviluppando un lettore video per contenuti in streaming utilizzando AVPlayer Framework. Mi sono imbattuto nella proprietà VideoGravity String di AVPlayerLayer che mi permetteva di impostare la modalità di ridimensionamento/ridimensionamento dei giocatori su valori diversi.Impostazione di AVPlayerLayer VideoGravity funziona su Simulator, non su iPad

Al fine di fornire all'utente la scala-caratteristiche note dal lettore predefinito, ho creato un metodo che eseguire il codice seguente:

AVPlayerLayer *layer = (AVPlayerLayer *)[self.videoContainer layer]; 

if([layer.videoGravity isEqualToString:AVLayerVideoGravityResizeAspect]) 
    layer.videoGravity = AVLayerVideoGravityResizeAspectFill; 
else 
    layer.videoGravity = AVLayerVideoGravityResizeAspect; 

Questo funziona molto bene nel simulatore, ma in qualche modo non sul mio iPad 2 con iOS 5.0.1 installato.

Qualcuno ha avuto problemi simili? Si tratta di un bug iOS noto con 5.0.1? Esiste un approccio migliore all'implementazione del ridimensionamento/ridimensionamento con AVPlayerLayer?

Qualsiasi idee/suggerimenti/help e le raccomandazioni sono molto apprezzate,

Grazie,

Sam

+0

Quando dici che non funziona su un dispositivo reale, cosa succede realmente? Niente o qualche altro comportamento inaspettato? – reddersky

+0

purtroppo non accade nulla (visibile) ... se I NSLog (layer.videoGravity) restituisce la stringa "corretta" VideoGravity. Accetta anche le modifiche, ma non ridimensiona realmente il contenuto del film ... – samsam

+0

Qui potrei essere abbaiare sull'albero sbagliato, ma perché stai impostando il videoGravity su una stringa del nome costante piuttosto che sull'impostazione alla costante stessa? – reddersky

risposta

20

L'impostazione dei limiti sarà internamente setNeedsLayout. Devi chiamare te stesso se cambi solo la gravità. Una chiamata a setNeedsDisplay per forzare un re-draw non ha avuto alcun problema, anche se immagino che AVPlayerLayer stia aggiornando il contenuto del livello così frequentemente da non avere importanza.

EDIT: Il tuo nome è il doppio del mio!

+1

Non sono riuscito a far funzionare questa soluzione per me e ho scoperto che il problema era un bug in iOS 5.0 e 5.0.1. Se qualcun altro si imbatte in questo e ha bisogno di una soluzione, controlla: http://stackoverflow.com/questions/8918105/animate-avplayerlayer-videogravity-property –

4

sono finalmente riuscito a risolvere il mio problema scambiando la dichiarazione di cui sopra con il seguente ...

if (self.player.status == AVPlayerStatusReadyToPlay) { 
    if([((AVPlayerLayer *)[self.videoContainer layer]).videoGravity isEqualToString:AVLayerVideoGravityResizeAspect]) 
     ((AVPlayerLayer *)[self.videoContainer layer]).videoGravity = AVLayerVideoGravityResizeAspectFill; 
    else 
     ((AVPlayerLayer *)[self.videoContainer layer]).videoGravity = AVLayerVideoGravityResizeAspect; 

    ((AVPlayerLayer *)[self.videoContainer layer]).bounds = ((AVPlayerLayer *)[self.videoContainer layer]).bounds; 
} 

l'impostazione dei limiti di AVPlayerLayer sul limite di AVPlayerLayer sembrava fare il trucco. anche se non capisco davvero perché.

tuttavia: hurray per soluzione di lavoro.

+1

Vedere anche la domanda [Animare AVGlayerLayer videoGravity] (http://stackoverflow.com/a/10489823/21698) per una soluzione che anima il modifica della gravità video su iOS 5.0.1. – 0xced

Problemi correlati