2012-05-07 30 views
24

Trong ứng dụng của tôi, tôi cần chọn bất kỳ tệp video nào và hiển thị url hiển thị cho tệp video trong ứng dụng.Cách chọn bất kỳ tệp Video hoặc Phim nào từ 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]; 
    } 
} 

Tôi đã sử dụng đoạn mã trên để hiển thị hình ảnh và video, mọi thứ đang đến tốt, tuy nhiên khi tôi chọn bất kỳ tập tin video, nó không nói đến UIImagePickerController Đại biểu Phương pháp, tập tin video trực tiếp đóng, i don 't muốn chơi bất kỳ tập tin video, khi tôi chọn bất kỳ file video cần đến trong bất động sản đại biểu của nó

Trả lời

57

Chọn video từ Thư viện iPhone không hoạt động trên Trình mô phỏng iOS. Dùng thử trên iPhone thật.

Đây là mã để chọn video từ Thư viện ảnh iOS mà tôi đã sử dụng trong các dự án của mình. Chỉ cần thêm phương thức video từ bộ chọn vào nút mong muốn của bạn.

- (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]; 
} 

Chuỗi moviepath cung cấp cho bạn đường dẫn của video đã chọn có thể được sử dụng để thực hiện bất kỳ hành động mong muốn nào với video đó.

Đừng quên thêm khung MobileCoreServices.framework vào dự án của bạn! Sau đó, nhập nó như sau:

#import <MobileCoreServices/UTCoreTypes.h> 
+1

Nếu bạn đang sử dụng ARC, bạn có thể so sánh loại phương tiện truyền thông dễ dàng hơn một chút. if ([mediaType isEqualToString: (__ bridge NSString *) kUTTypeMovie]) { – averydev

+0

Bạn cũng có thể sử dụng cú pháp đường để tạo mảng như sau: 'imagePicker.mediaTypes = @ [(NSString *) kUTTypeMovie, (NSString *) kUTTypeImage];' (v.v., thêm các loại như mong muốn.) Chức năng tương tự, chỉ cần gõ ít hơn một chút.:) – Olie

+0

Câu trả lời tuyệt vời :). Tôi thấy rằng bằng cách thiết lập picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; chỉ đưa ra một danh sách các video và thấy nó hữu ích hơn cho những gì tôi đã làm. Ghi nhớ các loại nguồn khác nhau sẽ hiển thị các menu khác nhau (cho tôi sử dụng UIImagePickerControllerSourceTypePhotoLibrary đưa lên các anbom ảnh của tôi nhưng sau đó hiển thị chúng trống video) –

4

thử điều này: -

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]; 

trong phương pháp đại biểu: -

- (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]; 
} 
    } 
+0

Cảm ơn Gypsa đã trả lời nhanh tuy nhiên nó không hoạt động, nó vẫn chưa được gửi theo phương thức đại biểu, khi chọn bất kỳ phim nào, tôi có 3 phim m4v trong Simulator – user1379448

+0

kiểm tra xem tệp .h bạn chưa quên viết: - Gypsa

+0

Tôi đã thực hiện nhưng không thành công, – user1379448

1

Mã của @Rinesh Kaushik giúp với cùng một vấn đề mà tôi có.

tôi đã thay đổi:

//NSArray * availableMediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypePhotoLibrary]; 
     //imagePickerController.mediaTypes = availableMediaTypes; 

     imagePickerController.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *)kUTTypeMovie,  nil]; 

và chỉ cách này, tôi có thể xem video và chọn nó. lạ

-4

Đừng sử dụng UIImagePicker, chỉ cần sử dụng assetlibrary, thực hiện bảng chọn video tùy chỉnh quyền truy cập vào tập tin video được chọn trực tiếp, lưu các tập tin video và compess file nếu bạn muốn ..

+6

Tại sao lại phát minh ra bánh xe khi Apple đã làm điều đó? Hôm nay tất cả chúng ta cần phải vội vàng và nhiều người trong chúng ta là vĩnh viễn trên một lịch trình chặt chẽ. Vì vậy, việc sử dụng 'UIImagePickerController' sẵn sàng thực hiện chắc chắn là thực hành tốt! Như một cộng thêm tuyệt vời, người dùng đã quen thuộc với bộ chọn này. –

0

Swift 3 cập nhật:

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) 
    } 
} 

nhập MobileCoreServices nhập khẩu và thêm đại biểu UIImagePickerControllerDelegateUINavigationControllerDelegate.

Các vấn đề liên quan