via sincronizar puedo porque para mac hacer fotos conectar con como activarlo iphone ios uiimagepickercontroller

sincronizar - iPhone: ¿Cómo obtener la duración del video seleccionado de la biblioteca?



porque no puedo sincronizar mi iphone con itunes (6)

Estoy usando UIImagePickerController para elegir el archivo de video de la biblioteca. Y el usuario puede subir el video.

También estoy usando la propiedad videoMaximumDuration mientras el usuario quiere capturar el video y cargarlo.

Quiero saber que ¿Cómo puedo obtener la duración del archivo de video seleccionado? de modo que puedo restringir al usuario para que cargue un video que tenga una duración de más de 20 segundos.

Puedo obtener información básica sobre el video seleccionado mediante este código:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { selectedVideoUrl = [info objectForKey:UIImagePickerControllerMediaURL]; NSError *error; NSDictionary * properties = [[NSFileManager defaultManager] attributesOfItemAtPath:selectedVideoUrl.path error:&error]; NSNumber * size = [properties objectForKey: NSFileSize]; NSLog(@"Vide info :- %@",properties); }

Pero no hay nada acerca de la duración del video seleccionado.

Gracias...


En el caso de que utilice los AVFoundation y AssetLibrary, puede enumerar todos los activos, aplicar el filtro solo para videos y obtener la duración de cada uno de ellos con el método - (id)valueForProperty:(NSString *)property . Pase en ALAssetPropertyDuration para la propiedad. El siguiente código imprime lo siguiente en la consola.

el videoclip número 0 es 66.80833333333334 segundos

el videoclip número 1 es 190.06 segundos

el videoclip número 2 es 13.74 segundos

- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. if (!assetItems) { assetItems = [[NSMutableArray alloc] init]; } else { [assetItems removeAllObjects]; } if (!assetLibrary) { assetLibrary = [[ALAssetsLibrary alloc] init]; } ALAssetsLibraryGroupsEnumerationResultsBlock listBlock = ^(ALAssetsGroup *group, BOOL *stop) { if (group) { [group setAssetsFilter:[ALAssetsFilter allVideos]]; [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) { if (result) { [assetItems addObject:result]; NSString *duration = [result valueForProperty:ALAssetPropertyDuration]; NSLog(@"video clip number %d is %@ seconds/n",index, duration); } }]; } }; ALAssetsLibraryAccessFailureBlock failBlock = ^(NSError *error) { // error handler block NSString *errorTitle = [error localizedDescription]; NSString *errorMessage = [error localizedRecoverySuggestion]; NSLog(@"%@.../n %@/n",errorTitle,errorMessage); }; [assetLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:listBlock failureBlock:failBlock]; }


La otra respuesta a esta pregunta usando AVPlayerItem no me funcionó, pero esto sí lo hizo usando AVURLAsset:

#import <AVFoundation/AVFoundation.h> -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { NSURL *videoURL=[info objectForKey:@"UIImagePickerControllerMediaURL"]; AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:videoURL options:nil]; NSTimeInterval durationInSeconds = 0.0; if (asset) durationInSeconds = CMTimeGetSeconds(asset.duration); }


Sí, puede usar la propiedad "duración" definida por MPMediaPlayerController. Por favor probarlo y comprobar la salida. Puede referirse a la propiedad de duración aquí.

Intente usar el MPMediaPlayerController para reproducir el video y luego use la propiedad "duration". U podrá obtener claramente los detalles sobre la duración del video.


Swift 3.0 y Swift 4

let outputFileURL = info[UIImagePickerControllerMediaURL] as! URL // get the asset let asset = AVURLAsset.init(url: outputFileURL) // AVURLAsset.init(url: outputFileURL as URL) in swift 3 // get the time in seconds let durationInSeconds = asset.duration.seconds print("==== Duration is ",durationInSeconds)


Tengo la solución: uso la clase AVFoundation y el marco AVFoundation y CoreMedia .

#import <AVFoundation/AVFoundation.h> #import <AVFoundation/AVAsset.h> - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { selectedVideoUrl = [info objectForKey:UIImagePickerControllerMediaURL]; AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:selectedVideoUrl]; CMTime duration = playerItem.duration; float seconds = CMTimeGetSeconds(duration); NSLog(@"duration: %.2f", seconds); }


Swift 4

independientemente de usar didFinishPickingMediaWithInfo o didFinishRecordingToOutputFileAtURL puede:

// needed only for didFinishPickingMediaWithInfo let outputFileURL = info[UIImagePickerControllerMediaURL] as! URL // get the asset let asset = AVURLAsset(url: outputFileURL) // get the time in seconds let durationInSeconds = asset.duration.seconds