I tried the code under the code to get all the videos from the photo library using ALAsset . So far I want to display all the videos in a UICollectionview , but nothing seems to be displayed. Please give me some advice. Thanks in advance.
-ViewDidLoad (): get all videos from the photo library
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]; [_collectionView reloadData]; } }]; } } failureBlock:^(NSError *error) { NSLog(@"error enumerating AssetLibrary groups %@\n", error); }];
-imageFromVideoURL ():
- (UIImage *)imageFromVideoURL:(NSURL*)videoURL { // result UIImage *image = nil; // AVAssetImageGenerator 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:@"name"]; NSLog(@"Values of dictionary==>%@", dic); NSLog(@"Videos Are:%@",videoURL); CGImageRelease(halfWayImage); } return image; }
Start displaying all video thumbnails in a UICollectionView:
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { return allVideos.count; } - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath]; NSLog(@"allvideo %@", allVideos); ALAsset *alasset = [allVideos objectAtIndex:indexPath.row]; return cell; }
source share