2012-05-25 20 views
7

Chcę uzyskać listę wszystkich plików wideo, które są przechowywane wewnętrznie w urządzeniu iPhone (nagrane i iPod). Chcę pokazać wszystkie pliki wideo w mojej aplikacji.Jak uzyskać listę wszystkich plików wideo w telefonie iPhone?

Mam TableViewController i chcę pokazać wszystkie pliki wideo z iPhone'a w mojej aplikacji.

Jak mogę uzyskać listę wszystkich plików wideo?

+1

Tak, jest to możliwe, ale przede wszystkim powiedz mi, co próbowałeś dotychczas? –

+0

Chcę pobrać cały plik wideo z iPhone'a (nagrany i inny plik wideo przechowywany w iPhonie). – dheeru

Odpowiedz

11

Musisz użyć assetLibraries Spróbuj ten kod: -

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

Kod ten będzie u listę filmów z telefonu iPhone.

To może pomóc thankss :)

+0

Czy będzie on również zawierał wideo z aplikacji "Wideo"? – Maulik

+0

Nie, chcę pobrać cały plik wideo tylko z iPhone'a (nagrany i inny plik wideo przechowywany w iPhonie) – dheeru

+0

toh da naiw !!!! –

3

uzyskać listę wszystkich filmów i miniatury

Z pomocą powyższej odpowiedzi dostałem to działa ..

Dzięki @Nikhil Bansal,

bardzo mi pomógł, ale nadal wymaga kilku godzin, aby wykonywalnego kodu, gdy brakuje kilku rzeczy w swojej odpowiedzi

enter image description here

Więc chciałbym podzielić się moją pełny kod roboczy

1.just dodać ram AssetsLibrary, AVFoundation i MediaPlayer.

2. AssetBrowserItem.h i AssetBrowserItem.mhere

3.Use poniżej kodu listę wszystkich filmów z urządzenia z systemem iOS dostać lib

4.run aplikacji i see log filmy szczegóły

#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 
Powiązane problemy