2012-05-25 8 views
7

Deseo obtener la lista de todos los archivos de video que se almacenan en el iPhone internamente (grabados y en el iPod). Quiero mostrar todos los archivos de video en mi aplicación.Cómo obtener la lista de todos los archivos de video en el iPhone

Tengo un TableViewController y quiero mostrar todo el archivo de video del iphone en mi aplicación.

¿Cómo puedo obtener una lista de todos los archivos de video?

+1

Sí, esto es posible, pero antes que nada dime qué has intentado hasta ahora ?? –

+0

quiero buscar todo el archivo de video de iphone (archivo grabado y otro archivo de video almacenado en iphone) – dheeru

Respuesta

11

usted tiene que utilizar assetLibraries Prueba este código: -

- (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]; 
} 

Este código u dará lista de vídeos de tu iPhone.

Se le puede ayudar a Thankss :)

+0

¿También dará los videos de 'Video app'? – Maulik

+0

No, quiero buscar todo el archivo de video desde el iphone solamente (archivo grabado y otro archivo de video almacenado en el iphone) – dheeru

+0

toh dará na !!!! –

3

Obtener lista de todos los videos y miniaturas

Con la ayuda de respuesta anterior me tengo trabajo ..

Gracias a @Nikhil Bansal,

Me ayudó, pero aún así se requiere par de horas para hacer que el código ejecutable que se está perdiendo algunas cosas en su respuesta

enter image description here

Así que me gustaría compartir mi código de trabajo completa

1.just añadir marcos AssetsLibrary, AVFoundation y MediaPlayer.

2. AssetBrowserItem.h y AssetBrowserItem.mhere

3.use continuación código para obtener la lista de todos los vídeos de dispositivo iOS lib

4.run aplicación y ver videos Entrar detalles

#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 
Cuestiones relacionadas