2012-02-14 10 views
9

Sono un principiante nello sviluppo di iOS. Sto sviluppando un'applicazione in cui richiedo la dimensione di un video che viene riprodotto in MPMoviePlayerController.Ottieni le dimensioni del video a livello di programmazione nell'obiettivo c

Sto utilizzando la proprietà naturalSize di MPMoviePlayerController per ottenere le dimensioni del video riprodotto.

@property(nonatomic, readonly) CGSize naturalSize; 

Ma il problema è che posso ottenere la dimensione naturale, solo quando il video viene riprodotto nel MPMoviePlayerController.

C'è un modo in cui posso ottenere le dimensioni del video prima che venga riprodotto nel MPMoviePlayerController.

- EDIT -

C'è qualche altra soluzione che posso affrontare per risolvere questo problema? Per favore aiuto.

+0

C'è anche una proprietà 'duration' di' MPMoviePlayerController' – tipycalFlow

+0

@tipycalFlow Sì, ho visto quella proprietà, ma volevo sapere altezza e larghezza del video che sta per essere riprodotto nell'oggetto MPMoviePlayerController prima che venga effettivamente riprodotto. – An1Ba7

risposta

7

Ci vuole tempo affinché MPMoviePlayerController carichi i metadati del video, quindi è necessario aggiungere un listener e attendere il caricamento di naturalSize. Qualcosa di simile a questo:

[[NSNotificationCenter defaultCenter] addObserver:self 
       selector:@selector(movieNaturalSizeAvailable:) 
       name:MPMovieNaturalSizeAvailableNotification 
       object:myMoviePlayer]; 

E in movieNaturalSizeAvailable:, myVideoPlayer.naturalSize ti dà il valore desiderato e dopo che, è possibile riprodurre il video.

+1

Grazie! funziona perfettamente! :) – An1Ba7

32

Potete leggere le dimensioni di un video utilizzando AVURLAsset e AVAssetTrack, in questo modo:

NSURL *mediaURL; // Your video's URL 
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:mediaURL options:nil]; 
NSArray *tracks = [asset tracksWithMediaType:AVMediaTypeVideo]; 
AVAssetTrack *track = [tracks objectAtIndex:0]; 

Quindi utilizzando s' il AVAssetTrack naturalSize proprietà:

CGSize mediaSize = track.naturalSize; 

Il vantaggio di ottenere i metadati del video in questo modo è che puoi accedervi immediatamente, senza dover riprodurre il video o aspettare che venga caricato.

+0

Funziona per me. Grazie. –

1

Ho solo pensato di condividere le mie esperienze per coloro che trovano questa pagina.

La dimensione naturale non è in realtà la risoluzione codificata, è la risoluzione del display. questo può essere diverso dalla risoluzione codificata, ad esempio se le proporzioni pixel! = 1 o (più comune) ci sono informazioni di metadati con apertura pulita nel video codificato.

Per ottenere la risoluzione codificata l'unico modo che ho trovato è quello di decodificare il primo fotogramma con ad esempio AVASsetReaderTrackOutput quindi ispezionare il buffer di pixel risultante con CVPixelBufferGetWidth (o GetHeight) per ottenere la risoluzione dei dati. se si utilizza imageGenerator si ottiene la risoluzione dello schermo (e una bitmap rgb della risoluzione dello schermo)

Problemi correlati