How Can i Get the List of all Video files from Library in ios sdk

前端 未结 7 2444
[愿得一人]
[愿得一人] 2020-12-09 06:13

Hi I\'m working On videos , i would like get the list of video files from library to Display and playing the Videos in my app. can any one help me.

7条回答
  •  Happy的楠姐
    2020-12-09 06:56

    Get List of all Video and Thumbnails

    Thanks to @Nikhil , who shared info here, it helped me, but still it required couple of hours to make the code executable as he is missing few things in his answer

    enter image description here

    So I would like to share my full working code

    1.just add frameworks AssetsLibrary, AVFoundation and MediaPlayer.

    2.AssetBrowserItem.h and AssetBrowserItem.m here

    3.use below code to get list of all videos from ios device lib

    4.run app and see Log for videos details

    #import "HomeViewController.h"
    #import 
    #import 
    #import 
    #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
    

提交回复
热议问题