How to select any Video or Movie file from UIImagePickerController

iphone, uiimagepickercontroller

Solution

Picking videos from the iPhone Library does not work on the iOS Simulator. Try it on a real iPhone.

Here is the code for picking video from the iOS Photo Library which I have used in my projects. Just add video method from selector to your desired button.

- (void)video {
    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
    imagePicker.delegate = self;
    imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    imagePicker.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *)kUTTypeMovie,      nil];

    [self presentModalViewController:imagePicker animated:YES];
 }


- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    NSString *mediaType = [info objectForKey: UIImagePickerControllerMediaType];

    if (CFStringCompare ((__bridge CFStringRef) mediaType, kUTTypeMovie, 0) == kCFCompareEqualTo) {
        NSURL *videoUrl=(NSURL*)[info objectForKey:UIImagePickerControllerMediaURL];
        NSString *moviePath = [videoUrl path];

        if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum (moviePath)) {
            UISaveVideoAtPathToSavedPhotosAlbum (moviePath, nil, nil, nil);
        }
    }

    [self dismissModalViewControllerAnimated:YES];
    [picker release];
}

The string `moviepath` gives you the path of the selected video which can be used to perform any desired action with that video.

Don't forget to add the `MobileCoreServices.framework` Framework to your project! Then import it like this:

#import <MobileCoreServices/UTCoreTypes.h>

Problem

In my app, i need to select any video file and show the display the url for a video file in the application. ``` -(void)viewDidLoad{ [super viewDidLoad]; self.imgPicker = [[UIImagePickerController alloc] init]; self.imgPicker.delegate = self; self.imgPicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; self.imgPicker.mediaTypes = [NSArray arrayWithObjects:(NSString *)kUTTypeMovie, (NSString *)kUTTypeImage, nil]; self.imgPicker.allowsEditing = NO; [self presentModalViewController:self.imgPicker animated:YES]; } -(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{ [picker dismissModalViewControllerAnimated:YES]; } -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage : (UIImage *)image editingInfo:(NSDictionary *)editingInfo{ } - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ value = 1; IMAGE_COUNTER = IMAGE_COUNTER + 1; NSString* mediaType = [info objectForKey:UIImagePickerControllerMediaType]; if ( [mediaType isEqualToString:@"public.movie" ]) { NSLog(@"Picked a movie at URL %@", [info objectForKey:UIImagePickerControllerMediaURL]); NSURL *url = [info objectForKey:UIImagePickerControllerMediaURL]; NSLog(@"> %@", [url absoluteString]); } else { UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; NSData* imageData = UIImageJPEGRepresentation(image, 1.0); NSString* incrementedImgStr = [NSString stringWithFormat: @"UserCustomPotraitPic%d.jpg", IMAGE_COUNTER]; NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString* documentsDirectory = [paths objectAtIndex:0]; NSString* fullPathToFile2 = [documentsDirectory stringByAppendingPathComponent:incrementedImgStr]; [imageData writeToFile:fullPathToFile2 atomically:NO]; } } ``` I have used the above code to display image and video , every thing is coming fine, however when i select any video file, it didn't comes to UIImagePickerController Delegate Method, Video file directly plays, i don't want to play any video file, when i select any video file it should come in its delegate property

Original source