9

Soy un principiante en el desarrollo de iOS. Estoy desarrollando una aplicación donde requiero el tamaño de un video que se está reproduciendo en MPMoviePlayerController.Obtenga las dimensiones del video mediante programación en el objetivo c

Estoy usando la propiedad naturalSize de MPMoviePlayerController para obtener las dimensiones del video que se reproduce.

@property(nonatomic, readonly) CGSize naturalSize; 

Pero el problema es que puedo obtener el tamaño natural, sólo cuando el vídeo se juega en el MPMoviePlayerController.

¿Hay alguna manera de obtener las dimensiones del video antes de que se reproduzca en MPMoviePlayerController?

- EDITAR -

¿Hay alguna otra solución que pueda acercarse a resolver este problema? Por favor ayuda.

+0

También hay una propiedad 'duration' de' MPMoviePlayerController' – tipycalFlow

+0

@tipycalFlow Sí, he visto esa propiedad, pero quería saber la alto y ancho del video que está a punto de reproducirse en el objeto MPMoviePlayerController antes de reproducirse. – An1Ba7

Respuesta

7

El MPMoviePlayerController tarda tiempo en cargar los metadatos de video, por lo que debe agregar un oyente y esperar a que se cargue el naturalSize. Algo como esto:

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

Y en movieNaturalSizeAvailable:, myVideoPlayer.naturalSize le da el valor deseado y después de eso, se puede reproducir el vídeo.

+1

Gracias! ¡funciona a la perfección! :) – An1Ba7

32

Usted puede leer las dimensiones de un vídeo utilizando AVURLAsset y AVAssetTrack, así:

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

Luego, utilizando el AVAssetTrack 's naturalSize propiedad:

CGSize mediaSize = track.naturalSize; 

El beneficio de obtener los metadatos del vídeo de esta manera es que puedes acceder a él de inmediato, sin tener que reproducir el video o esperar a que se cargue.

+0

Funciona para mí. Gracias. –

1

Sólo pensé en compartir mis experiencias para aquellos que encuentran esta página.

El tamaño natural no es realmente la resolución codificada, es la resolución de la pantalla. esto puede ser diferente de la resolución codificada, por ejemplo, si la relación de aspecto de píxel! = 1 o (más común) hay una información de metadatos de apertura limpia en el video codificado.

Para obtener la resolución codificada, la única forma que he encontrado es decodificar el primer cuadro con, por ejemplo, AVASsetReaderTrackOutput y luego inspeccionar el búfer de píxeles resultante con CVPixelBufferGetWidth (o GetHeight) para obtener la resolución de datos. si utiliza imageGenerator obtendrá la resolución de pantalla (y un mapa de bits rgb de la resolución de pantalla)

Cuestiones relacionadas