Dans mon application, je dois sélectionner n'importe quel fichier vidéo et afficher à l'écran l'URL d'un fichier vidéo dans l'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];
}
}
J'ai utilisé le code ci-dessus pour afficher des images et des vidéos, tout va bien, mais lorsque je sélectionne un fichier vidéo, il ne vient pas de la méthode de délégation UIImagePickerController, le fichier vidéo est lu directement, je ne souhaite lire aucune vidéo. fichier, lorsque je sélectionne un fichier vidéo, il doit entrer dans sa propriété delegate
La sélection de vidéos dans la bibliothèque iPhone ne fonctionne pas sur le simulateur iOS. Essayez-le sur un vrai iPhone.
Voici le code pour choisir une vidéo dans la photothèque iOS que j'ai utilisée dans mes projets. Il suffit d’ajouter la méthode vidéo du sélecteur au bouton souhaité.
- (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];
}
La chaîne moviepath
vous donne le chemin de la vidéo sélectionnée, qui peut être utilisé pour effectuer toute action souhaitée avec cette vidéo.
N'oubliez pas d'ajouter le framework MobileCoreServices.framework
à votre projet! Puis importez-le comme ceci:
#import <MobileCoreServices/UTCoreTypes.h>
essaye ça:-
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;
imagePicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
imagePicker.mediaTypes = [NSArray arrayWithObject:(NSString *)kUTTypeMovie];
NSArray *sourceTypes = [UIImagePickerController availableMediaTypesForSourceType:imagePicker.sourceType];
if (![sourceTypes containsObject:(NSString *)kUTTypeMovie ])
{
//NSLog(@"no video");
}
[self presentModalViewController:imagePicker animated:YES];
En méthode déléguée: -
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
NSString *type = [info objectForKey:UIImagePickerControllerMediaType];
//NSLog(@"type=%@",type);
if ([type isEqualToString:(NSString *)kUTTypeVideo] ||
[type isEqualToString:(NSString *)kUTTypeMovie])
{// movie != video
NSURL *urlvideo = [info objectForKey:UIImagePickerControllerMediaURL];
}
}
Le code de @Dinesh Kaushik aide à résoudre le même problème que moi.
J'ai changé :
//NSArray * availableMediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
//imagePickerController.mediaTypes = availableMediaTypes;
imagePickerController.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *)kUTTypeMovie, nil];
et seulement de cette façon, je peux voir la vidéo et la sélectionner. étrange
Swift 3 mise à jour:
func galleryVideo()
{
if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.savedPhotosAlbum) {
let videoPicker = UIImagePickerController()
videoPicker.delegate = self
videoPicker.sourceType = .photoLibrary
videoPicker.mediaTypes = [kUTTypeMovie as String]
self.present(videoPicker, animated: true, completion: nil)
}
}
Importer importer MobileCoreServices et ajouter des délégués UIImagePickerControllerDelate et UINavigationControllerDelate .