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];
其中 kUTTypeMovie
和 kuTTypeImage
是 MobileCoreServices 框架的一部分。
好的,在 Lyndsey Scott 的帮助下,我终于回答了我自己的问题:
- 没有从媒体库中获取视频的标准控件(UIImagePickerController 只能从相机胶卷或相册中获取视频)。
所以,我使用下一个代码来获取和枚举视频:
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。如果我遗漏了什么或发布了错误的答案 - 请纠正我
我必须从设备中获取视频列表。我知道如何在 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];
其中 kUTTypeMovie
和 kuTTypeImage
是 MobileCoreServices 框架的一部分。
好的,在 Lyndsey Scott 的帮助下,我终于回答了我自己的问题:
- 没有从媒体库中获取视频的标准控件(UIImagePickerController 只能从相机胶卷或相册中获取视频)。
所以,我使用下一个代码来获取和枚举视频:
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。如果我遗漏了什么或发布了错误的答案 - 请纠正我