iOS 有什么方法可以检索所有视频?

iOS Any way to retrieve all videos?

我必须从设备中获取视频列表。我知道如何在 UIImagePickerController 的帮助下从相机胶卷中获取视频。但是,使用 UIImagePickerController,我无法获取 "Videos" 应用程序(标准 iOS 应用程序)中显示的视频。

我应该使用什么?是否有适合我的标准(或 GitHub)控制器?

您可以通过 ALAssetsLibrary 对象进行枚举以获取所有视频,例如:

ALAssetsLibrary *library = [[ALAssetsLibrary alloc]init];
NSMutableArray* videoAssets = [[NSMutableArray alloc] init];

[library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) { 
     if (group) {
         [group setAssetsFilter:[ALAssetsFilter allVideos]];    
         [group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop) { 
              if (asset) {
                  [videoAssets addObject:asset];
              }
         }];
     }
}

然后,如果您想要一个视频 url,您可以使用 [[asset defaultRepresentation] url] 从资产中访问它。

更新: 默认情况下,您的 UIImagePickerController 将仅显示照片和包含照片的相册,但如果您还指定,您的 "Videos" 相册应该会出现您希望 UIImagePickerController 显示视频,例如:

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

[self presentViewController:imagePicker animated:true completion:nil];

其中 kUTTypeMoviekuTTypeImage 是 MobileCoreServices 框架的一部分。

好的,在 Lyndsey Scott 的帮助下,我终于回答了我自己的问题:

  1. 没有从媒体库中获取视频的标准控件(UIImagePickerController 只能从相机胶卷或相册中获取视频)。
  2. 所以,我使用下一个代码来获取和枚举视频:

    MPMediaQuery *videoQuery = [[MPMediaQuery alloc] init];
    
    NSMutableArray *items = [NSMutableArray arrayWithCapacity:0];
    NSArray *mediaItems = [videoQuery items];
    
    // Maybe do something with title and URL
    for (MPMediaItem *mediaItem in mediaItems) {
        NSURL *URL = (NSURL*)[mediaItem valueForProperty:MPMediaItemPropertyAssetURL];
        if (URL) {
            NSString *title = (NSString*)[mediaItem valueForProperty:MPMediaItemPropertyTitle];
        }
    }
    

然后我用获取的电影列表创建了自己的 ViewController。

P.S。如果我遗漏了什么或发布了错误的答案 - 请纠正我