如何从ios sdk库中获取所有video文件的列表

您好我工作的video,我想从video库中的video文件列表显示和播放我的应用程序中的video。 谁能帮我。

allVideos = [[NSMutableArray alloc] init]; ALAssetsLibrary *assetLibrary = [[ALAssetsLibrary alloc] init]; [assetLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) { if (group) { [group setAssetsFilter:[ALAssetsFilter allVideos]]; [group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop) { if (asset) { dic = [[NSMutableDictionary alloc] init]; ALAssetRepresentation *defaultRepresentation = [asset defaultRepresentation]; NSString *uti = [defaultRepresentation UTI]; NSURL *videoURL = [[asset valueForProperty:ALAssetPropertyURLs] valueForKey:uti]; NSString *title = [NSString stringWithFormat:@"video %d", arc4random()%100]; UIImage *image = [self imageFromVideoURL:videoURL]; [dic setValue:image forKey:@"image"]; [dic setValue:title forKey:@"name"]; [dic setValue:videoURL forKey:@"url"]; [allVideos addObject:dic]; } }]; else { } } failureBlock:^(NSError *error) { NSLog(@"error enumerating AssetLibrary groups %@\n", error); }]; 

它将打开照片库,只显示电影types的内容。

 #import <MobileCoreServices/MobileCoreServices.h> UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; imagePicker.delegate = self; imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; imagePicker.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *)kUTTypeMovie, nil]; [self presentModalViewController:imagePicker animated:YES]; 

获取所有video和缩略图列表

感谢@Nikhil,他在这里分享了信息, 它帮助了我,但仍然需要几个小时才能使代码可执行,因为他在答案中缺less了一些东西

在这里输入图像说明

所以我想分享我的完整工作代码

1.只需添加框架AssetsLibraryAVFoundationMediaPlayer

2. AssetBrowserItem.hAssetBrowserItem.m 在这里

3.使用下面的代码来获取来自ios设备库的所有video列表

4.运行应用程序,并查看日志中的video详细信息

 #import "HomeViewController.h" #import <AssetsLibrary/AssetsLibrary.h> #import <MediaPlayer/MediaPlayer.h> #import <AVFoundation/AVFoundation.h> #import "AssetBrowserItem.h" @interface HomeViewController () @property (nonatomic, strong) ALAssetsLibrary *assetsLibrary; @property (nonatomic, strong) NSURL *videoURL; @property (nonatomic, strong) MPMoviePlayerController *mpVideoPlayer; @property (nonatomic, strong) NSMutableArray *videoURLArray; @property (nonatomic, strong) NSMutableArray *assetItems; @property (nonatomic, strong) NSMutableDictionary *dic; @end @implementation HomeViewController @synthesize assetsLibrary, assetItems,dic; @synthesize videoURL,videoURLArray, mpVideoPlayer; - (void)viewDidLoad { [super viewDidLoad]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } #pragma mark - Show Video List Methods - (IBAction)showVideoList:(id)sender { [self buildAssetsLibrary]; } - (void)buildAssetsLibrary { assetsLibrary = [[ALAssetsLibrary alloc] init]; ALAssetsLibrary *notificationSender = nil; videoURLArray = [[NSMutableArray alloc] init]; NSString *minimumSystemVersion = @"4.1"; NSString *systemVersion = [[UIDevice currentDevice] systemVersion]; if ([systemVersion compare:minimumSystemVersion options:NSNumericSearch] != NSOrderedAscending) notificationSender = assetsLibrary; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(assetsLibraryDidChange:) name:ALAssetsLibraryChangedNotification object:notificationSender]; [self updateAssetsLibrary]; } - (void)assetsLibraryDidChange:(NSNotification*)changeNotification { [self updateAssetsLibrary]; } - (void)updateAssetsLibrary { assetItems = [NSMutableArray arrayWithCapacity:0]; ALAssetsLibrary *assetLibrary = assetsLibrary; [assetLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) { if (group) { [group setAssetsFilter:[ALAssetsFilter allVideos]]; [group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop) { if (asset) { dic = [[NSMutableDictionary alloc] init]; ALAssetRepresentation *defaultRepresentation = [asset defaultRepresentation]; NSString *uti = [defaultRepresentation UTI]; videoURL = [[asset valueForProperty:ALAssetPropertyURLs] valueForKey:uti]; mpVideoPlayer = [[MPMoviePlayerController alloc] initWithContentURL:videoURL]; NSString *title = [NSString stringWithFormat:@"%@ %lu", NSLocalizedString(@"Video", nil), [assetItems count]+1]; [self performSelector:@selector(imageFromVideoURL)]; [dic setValue:title forKey:@"VideoTitle"];//kName [dic setValue:videoURL forKey:@"VideoUrl"];//kURL AssetBrowserItem *item = [[AssetBrowserItem alloc] initWithURL:videoURL title:title]; [assetItems addObject:item]; [videoURLArray addObject:dic]; NSLog(@"Video has info:%@",videoURLArray); } NSLog(@"Values of dictonary==>%@", dic); //NSLog(@"assetItems:%@",assetItems); NSLog(@"Videos Are:%@",videoURLArray); } ]; } // group == nil signals we are done iterating. else { dispatch_async(dispatch_get_main_queue(), ^{ //[self updateBrowserItemsAndSignalDelegate:assetItems]; // loadImgView.hidden = NO; // [spinner stopAnimating]; // [loadImgView removeFromSuperview]; //selectVideoBtn .userInteractionEnabled = YES; }); } } failureBlock:^(NSError *error) { NSLog(@"error enumerating AssetLibrary groups %@\n", error); }]; } - (UIImage *)imageFromVideoURL { UIImage *image = nil; AVAsset *asset = [[AVURLAsset alloc] initWithURL:videoURL options:nil];; AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:asset]; imageGenerator.appliesPreferredTrackTransform = YES; // calc midpoint time of video Float64 durationSeconds = CMTimeGetSeconds([asset duration]); CMTime midpoint = CMTimeMakeWithSeconds(durationSeconds/2.0, 600); // get the image from NSError *error = nil; CMTime actualTime; CGImageRef halfWayImage = [imageGenerator copyCGImageAtTime:midpoint actualTime:&actualTime error:&error]; if (halfWayImage != NULL) { // cgimage to uiimage image = [[UIImage alloc] initWithCGImage:halfWayImage]; [dic setValue:image forKey:@"ImageThumbnail"];//kImage NSLog(@"Values of dictonary==>%@", dic); NSLog(@"Videos Are:%@",videoURLArray); CGImageRelease(halfWayImage); } return image; } @end 

使用此方法从库中selectvideo。

  //Call this method. [self startMediaBrowserFromViewController: self usingDelegate: self]; - (BOOL) startMediaBrowserFromViewController: (UIViewController*) controller usingDelegate: (id <UIImagePickerControllerDelegate, UINavigationControllerDelegate>) delegate{ if (([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeSavedPhotosAlbum] == NO) || (delegate == nil) || (controller == nil)) return NO; UIImagePickerController *mediaUI = [[UIImagePickerController alloc] init]; mediaUI.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; mediaUI.mediaTypes = [[[NSArray alloc] initWithObjects: (NSString *) kUTTypeMovie, nil] autorelease]; mediaUI.allowsEditing = YES; mediaUI.delegate = self; mediaUI.videoMaximumDuration = 60.0; //mediaUI.videoQuality = UIImagePickerControllerQualityTypeLow; [controller presentModalViewController: mediaUI animated: YES]; return YES; } 

请参阅下面的链接。 这可能对你有所帮助

http://www.raywenderlich.com/13418/how-to-play-record-edit-videos-in-ios
祝你好运 !!!

使用Photos Framework检出博客文章以获取所有video资产http://iavinashkashyap.blogspot.in/2016/11/get-list-of-all-videos.html

码:

– (void)getAllVideoAssets {

 NSMutableArray *assets = [[NSMutableArray alloc] init]; //Fetch all video assets from Photos PHFetchResult *assetResults = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeVideo options:nil]; //get all assets for (PHAsset *asset in assetResults){ NSLog(@"asset type = %zd", asset.mediaType); [assets addObject:asset]; } self.allVideoslistArray = [[NSMutableArray alloc] init]; //create an instance of PHImageManager PHImageManager *manager = [PHImageManager defaultManager]; for(PHAsset *asset in assets){ //block of code for represent video assets [manager requestAVAssetForVideo:asset options:nil resultHandler:^(AVAsset * _Nullable asset, AVAudioMix * _Nullable audioMix, NSDictionary * _Nullable info) { if ([asset isKindOfClass:[AVURLAsset class]]) { NSURL *url = (NSURL *)[[(AVURLAsset *)asset URL] fileReferenceURL]; UIImage *thumbnail = [self createThunbnailImage:url]; [self.allVideoslistArray addObject:@{@"VideoUrl":url,@"ThumbnailImage":thumbnail, @"VideoAsset":asset}]; } }]; }//end for loop 

}