Search code examples
iosobjective-ciphonecocoa-touchiphone-video

How to get the list of all video files in iPhone


I want to get the list of all video files which are stored in iPhone internally (recorded and iPod). I want to show all the video files in my application.

I have a TableViewController and want to show all video file from iphone in my application.

How can I get a list of all the video files?


Solution

  • You have to use assetLibraries Try this code :-

    - (void)updateAssetsLibrary
    {
    loadImgView.hidden = NO;
    [spinner startAnimating];
    //selectVideoBtn .userInteractionEnabled = NO;
    
    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];
                     appDelegate.videoURL = [[asset valueForProperty:ALAssetPropertyURLs] valueForKey:uti];
    
                     mpVideoPlayer = [[MPMoviePlayerController alloc] initWithContentURL:appDelegate.videoURL];
    
                     NSString *title = [NSString stringWithFormat:@"%@ %i", NSLocalizedString(@"Video", nil), [assetItems count]+1];
    
                     [self performSelector:@selector(imageFromVideoURL)];
                     [dic setValue:title forKey:kName];
                     [dic setValue:appDelegate.videoURL forKey:kURL];
    
                     AssetBrowserItem *item = [[AssetBrowserItem alloc] initWithURL:appDelegate.videoURL title:title];
                     [assetItems addObject:item];
                     [appDelegate.videoURLArray addObject:dic];
    
                     NSLog(@"Video has info:%@",appDelegate.videoURLArray);
                 }
                 NSLog(@"Values of dictonary==>%@", dic);
    
                 //NSLog(@"assetItems:%@",assetItems);
                 NSLog(@"Videos Are:%@",appDelegate.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 
    {
    // result 
    UIImage *image = nil;
    
    // AVAssetImageGenerator
    AVAsset *asset = [[AVURLAsset alloc] initWithURL:appDelegate.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:kImage];
        NSLog(@"Values of dictonary==>%@", dic);
        NSLog(@"Videos Are:%@",appDelegate.videoURLArray);
        CGImageRelease(halfWayImage);
    }
    return image;
    }
    
    - (void)assetsLibraryDidChange:(NSNotification*)changeNotification
    {
    [self updateAssetsLibrary];
    }
    
    - (void)buildAssetsLibrary
    {
    assetsLibrary = [[ALAssetsLibrary alloc] init];
    ALAssetsLibrary *notificationSender = nil;
    
    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];
    }
    

    This code will give u list of videos of your iPhone.

    It may help you Thankss :)