2010-10-05 15 views
3

Je suis encore assez nouveau à Obj-C et l'idée de blocs. J'ai lu ce post sur l'affichage des images à partir de l'URL extraites de ALAssets: display image from URL retrieved from ALAsset in iPhonelire la vidéo à partir de l'URL récupérée à partir de ALAsset dans iOS

En plus d'être en mesure d'afficher les fichiers image dans un UITableView en utilisant le cadre ALAsset, je veux être en mesure de lire une vidéo qui est stocké dans le dossier images comme bien. L'élément vidéo apparaît comme une image, donc j'aimerais pouvoir utiliser cette liste de vidéos dans la table et la faire jouer. (En d'autres termes, je souhaite lire une vidéo à l'aide de la bibliothèque d'actifs)

Est-ce possible avec MPMoviePlayerController?

A partir de ce poste ci-dessus je collecte j'ai besoin le code de cette fonction pour obtenir une URL d'actifs pour un fichier vidéo:

ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset) 
    { 
    }; 

Si cela est juste, quel code aurais-je besoin de mettre dans cette fonction pour que je puisse lire la vidéo avec succès via MPMoviePlayerController?

Juste pour référence, mon code pour l'affichage des actifs dans un UITableView est ici:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
NSString *CellIdentifier = @"id"; 

    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 


[[cell imageView] setImage:[UIImage imageWithCGImage:[[assets objectAtIndex:indexPath.row] thumbnail]]]; 
[[cell textLabel] setText:[NSString stringWithFormat:@"Item %d", indexPath.row+1]]; 

    return cell; 
} 

Ceci est mon premier post donc je suis désolé si je posterai mal. Merci pour votre aide

Répondre

3

Ok j'ai découvert l'on peut utiliser ce bloc pour cracher un journal de l'adresse de la bibliothèque d'actifs:

void (^assetEnumerator)(struct ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) 
{ 

    if(result != nil) { 
     NSLog(@"See Asset: %@", result); 
     [assets addObject:result]; 

    } 
}; 

qui recracher quelque chose comme

"See Asset: ALAsset - Type:Video, URLs:{ 
    "com.apple.m4v-video" = "assets-library://asset/asset.m4v?id=100&ext=m4v"; " 

Je pouvez envoyer cette adresse de bibliothèque d'actifs à MPMoviePlayerController et cela fonctionnera!

comme ceci:

NSString *urlAddress = @"assets-library://asset/asset.m4v?id=100&ext=m4v"; 
NSURL *theURL = [NSURL URLWithString:urlAddress]; 
mp = [[MPMoviePlayerController alloc] initWithContentURL:theURL]; 
etc... 

maintenant je dois juste comprendre comment obtenir cette chaîne URL de l'objet ALAsset dynamique, ce qui ne devrait pas être trop difficile à comprendre .. je l'espère

3

encore plus facile

MPMoviePlayerViewController *moviePlayerVC =[[MPMoviePlayerViewController alloc] initWithContentURL:[[asset defaultRepresentation] url]]; 
+5

Cela ne fonctionne pas pour moi. L'URL contient quelque chose comme 'assets-library: //asset/asset.MOV? Id = 12345 & ext = mov'. Le MoviePlayerController ne montre rien. –

0

Vous pouvez obtenir le url d'un asset en utilisant:

[result defaultRepresentation] url]; 
0

@ go2 La réponse est correcte mais le MoviePlayerController n'affiche rien.

donc vous devez également ajouter moviePlayerController.movieSourceType=MPMovieSourceTypeFile; voir ci-dessous le code pour jouer à ce.

MPMoviePlayerController *moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:fileURL]; 
[moviePlayerController.view setFrame:self.view.frame]; 
moviePlayerController.movieSourceType=MPMovieSourceTypeFile; 
moviePlayerController.fullscreen = YES; 
[moviePlayerController play];