iPhone4, iOS 4.3.3, iOS SDK4.3MPMoviePlayerController - Duración siempre 0
Hola a todos,
estoy creando una función de carga de vídeo. Los videos se recuperan usando UIImagePickerController y se pueden capturar usando la cámara o recogidos de la biblioteca de fotos. Tengo una restricción de aplicación de 60 segundos de duración máxima. Esto se logra fácilmente al grabar el vídeo utilizando la cámara a través de:
// vídeos límite de 60 segundos
[setVideoMaximumDuration selector: 60];
Sin embargo cuando el vídeo se selecciona de la biblioteca de fotos la única forma que veo de la obtención de la duración es a través de la propiedad MPMoviePlayerController duración de la siguiente manera:
// MediaType puede ser kUTTypeImage o kUTTypeMovie.
NSString * mediaType = [info objectForKey: UIImagePickerControllerMediaType]; NSLog (@ "% @", mediaType);
// si es una película
if ([mediaType isEqualToString:(NSString*)kUTTypeMovie]) {
// get the URL
NSURL* mediaURL = [info objectForKey:UIImagePickerControllerMediaURL];
NSLog(@"%@",mediaURL);
// can use MPMoviePlayerController class to get duration
int duration = -1;
MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL: mediaURL];
if (moviePlayer != nil) {
duration = moviePlayer.duration;
NSString *path = moviePlayer.contentURL;
[moviePlayer release];
}
sin embargo, la duración es siempre 0. Sé que el vídeo tiene una duración debido a que la duración se muestra como parte de los subtítulos cuando seleccionándolo en la biblioteca de fotos. Entiendo que la duración puede no estar siempre disponible, pero en este caso, la duración se muestra en photo lib. También verifico la propiedad contentURL y tiene un buen valor. Puedo recuperar el archivo, obtener su tamaño de archivo, etc., así sé que el NSURL del archivo es bueno ...
¡Gracias!
Puede escuchar la MPMovieDurationAvailableNotification. Eso requeriría que mantengas el MoviePlayer todo el tiempo suficiente para que pueda determinar la duración. La biblioteca de fotos probablemente usa un valor en caché. – omz
@imobilizer Si la respuesta a continuación ayudó, marque como es aceptado. – memmons