In meiner App muss ich eine beliebige Videodatei auswählen und der Anzeige die URL für eine Videodatei in der Anwendung anzeigen.
-(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];
}
}
Ich habe den obigen Code für die Anzeige von Bildern und Videos verwendet. Alles ist in Ordnung. Wenn ich jedoch eine Videodatei auswähle, kam es nicht zur UIImagePickerController-Delegatmethode. Die Videodatei wird direkt abgespielt. Ich möchte kein Video abspielen Datei, wenn ich eine Videodatei auswähle, sollte sie in ihre Delegate-Eigenschaft aufgenommen werden
Das Auswählen von Videos aus der iPhone-Bibliothek funktioniert auf dem iOS-Simulator nicht. Versuchen Sie es auf einem echten iPhone.
Hier ist der Code zum Auswählen von Videos aus der iOS-Fotobibliothek, die ich in meinen Projekten verwendet habe. Fügen Sie der gewünschten Schaltfläche einfach eine Videomethode aus der Auswahl hinzu.
- (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];
}
Die Zeichenfolge moviepath
gibt den Pfad des ausgewählten Videos an, mit dem eine beliebige Aktion mit diesem Video ausgeführt werden kann.
Vergiss nicht, das MobileCoreServices.framework
Framework zu deinem Projekt hinzuzufügen! Dann importiere es so:
#import <MobileCoreServices/UTCoreTypes.h>
versuche dies:-
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];
In der Delegiertenmethode: -
- (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];
}
}
@Dinesh Kaushiks Code hilft mit dem gleichen Problem, das ich hatte.
Ich habe mich verändert :
//NSArray * availableMediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
//imagePickerController.mediaTypes = availableMediaTypes;
imagePickerController.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *)kUTTypeMovie, nil];
und nur so kann ich das Video sehen und auswählen. seltsam
Swift 3 Update:
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)
}
}
Importieren Sie MobileCoreServices importieren und Delegierte hinzufügen UIImagePickerControllerDelegate und UINavigationControllerDelegate.