ALAssetsLibrary obtient le path d'une video et la joue plus tard

En utilisant le code ci-dessous, je suis en mesure d'get les files video dans tableview. Mais je suis incapable d'get le path de la video pour que je l'enregistre et l'utilise plus tard pour jouer.

- (void)viewDidLoad { [super viewDidLoad]; [activity startAnimating]; assets = [[NSMutableArray alloc] init]; library = [[ALAssetsLibrary alloc] init]; UIImage *viewImage; [library writeImageToSavedPhotosAlbum:[viewImage CGImage] orientation:(ALAssetOrientation)[viewImage imageOrientation] completionBlock:^(NSURL *assetURL, NSError *error){ if (error) { NSLog(@"error"); } else { NSLog(@"url %@", assetURL); } }]; [library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop){ if (group != NULL) { [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop){ if ([[result valueForProperty:ALAssetPropertyType] isEqualToSsortingng:ALAssetTypeVideo]) { NSLog(@"asset: %@", result); [assets addObject:result]; } }]; } [self.tableview reloadData]; [self.activity stopAnimating]; [self.activity setHidden:YES]; } failureBlock:^(NSError *error){ NSLog(@"failure"); }]; } // Customize the number of sections in the table view. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } // Customize the number of rows in the table view. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [assets count]; } // Customize the appearance of table view cells. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSSsortingng *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; } ALAsset *asset = [assets objectAtIndex:indexPath.row]; [cell.imageView setImage:[UIImage imageWithCGImage:[asset thumbnail]]]; [cell.textLabel setText:[NSSsortingng ssortingngWithFormat:@"Video %d", indexPath.row+1]]; return cell; } 

C'est ma sortie:

 2012-07-19 12:37:42.135 mptest[17310:707] asset: ALAsset - Type:Video, URLs:{ "com.apple.quicktime-movie" = "assets-library://asset/asset.MOV?id=336068EA-C1B1-481C-82DA-F2419561A91A&ext=MOV"; } 2012-07-19 12:37:42.147 mptest[17310:707] asset: ALAsset - Type:Video, URLs:{ "com.apple.quicktime-movie" = "assets-library://asset/asset.MOV?id=A1CBDDE4-4BC1-48F2-84E0-028D7B7F4879&ext=MOV"; } 2012-07-19 12:37:42.156 mptest[17310:707] asset: ALAsset - Type:Video, URLs:{ "com.apple.quicktime-movie" = "assets-library://asset/asset.MOV?id=3D76ABC7-515C-42E7-A940-B149C78FBAB6&ext=MOV"; } 2012-07-19 12:37:42.262 mptest[17310:707] error 

Quelqu'un peut-il m'aider avec ce problème?

Vous ne pouvez pas get le path de file réel à partir de AssetsLibrary à cause du sandboxing. Cependant, vous avez plusieurs options pour accéder / lire le file video.

1) Interrogez l'URL de l'asset en utilisant la méthode url de ALAssetRepresentation et passez-la à une instance de MPMoviePlayerController pour lire la video. Cette URL commence par assets-library: // et n'est pas une URL de système de files, mais MPMoviePlayerController sait comment gérer une telle URL.

2) Obtenez le contenu de la video en utilisant getBytes:fromOffset:length:error: de ALAssetsRepresentation pour save la video dans votre propre sandbox d'application pour la lire / éditer / partager ou utiliser getBytes:fromOffset:length:error: pour diffuser le contenu video .