W mojej aplikacji muszę wybrać dowolny plik wideo i wyświetlić ekran URL pliku wideo w aplikacji.Jak wybrać dowolny plik wideo lub filmu z UIImagePickerController
-(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];
}
}
Użyłem powyższy kod do wyświetlania obrazu i wideo, wszystko idzie dobrze, jednak kiedy wybrać dowolny plik wideo, to nie chodzi o UIImagePickerController Delegata metodzie plików wideo bezpośrednio odgrywa, i don „t chcesz odtwarzać dowolny plik wideo, po zaznaczeniu dowolnego pliku wideo powinno pochodzić w jego właściwość delegata
Jeśli używasz ARC, możesz łatwiej porównać rodzaj multimediów. if ([mediaType isEqualToString: (__ bridge NSString *) kUTTypeMovie]) { – averydev
Możesz również użyć cukru syntaktycznego do utworzenia tablicy w następujący sposób: 'imagePicker.mediaTypes = @ [(NSString *) kUTTypeMovie, (NSString *) kUTTypeImage];' (itp., dodaj typy według potrzeb.) Ta sama funkcjonalność, tylko trochę mniej pisania.:) – Olie
Świetna odpowiedź :). Znalazłem to ustawiając picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; wyświetlił tylko listę filmów i stwierdził, że jest bardziej przydatny do tego, o co prosiłem. Pamiętaj, że różne typy źródeł będą wyświetlać różne menu (dla mnie za pomocą UIImagePickerControllerSourceTypePhotoLibrary wyświetlają moje albumy ze zdjęciami, ale wyświetlają je puste) –