2013-05-02 7 views
2

Je suis nouveau ici. Je suis déjà 2 jours à chercher des solutions, mais malheureux.ios MPMoviePlayerController ne peut pas lire les fichiers locaux sur le simulateur

Voici mon code:

NSString *docPath = [NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *docaPathFull = [docPath stringByAppendingPathComponent:@"/IMG_0003.m4v"]; 
self.videoURL = [NSURL fileURLWithPath:docaPathFull]; 

MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:videoURL]; 
UIImage *thumbnail = [player thumbnailImageAtTime:4.0 timeOption:MPMovieTimeOptionExact]; 
player = nil;  
self.imageView.image = thumbnail; 

Le problème est, je ne peux pas faire un fichier vidéo visible MPMoviePlayerController. Je ne peux pas avoir de vignette et je ne peux pas le jouer, juste un lecteur noir et l'infini de chargement.

J'ai essayé:

NSString*thePath=[[NSBundle mainBundle] pathForResource:@"IMG_0003" ofType:@"m4v"]; 
self.videoURLtheurl=[NSURL fileURLWithPath:thePath]; 

et ce

self.videoURL = [[NSBundle mainBundle] URLForResource:@"IMG_0005" withExtension:@"mov"]; 

et ce

NSString *filePath = @"/Users/[user]/Documents/video/IMG_0004.mov"; 
self.videoURL = [NSURL fileURLWithPath:filePath]; 

Si vous avez des idées sur la façon de sauver ma vie, s'il vous plaît faire !!!

Un grand merci pour votre temps.

+0

Quel est le chemin exact de la vidéo? est-ce dans le répertoire des documents ou dans le paquet de l'application? * confus * – Ushan87

Répondre

1

En fait, ceci est mon exemple de travail de mon projet. Assurez-vous d'avoir ajouté votre fichier m4v à votre projet. La notification était un besoin pour moi, peut-être que ce n'est pas nécessaire pour vous.

theMovie = [[MPMoviePlayerController alloc] initWithContentURL: 
    [NSURL fileURLWithPath: [[NSBundle mainBundle] 
    pathForResource:@"yourmovie" ofType:@"m4v"]]]; 

theMovie.view.frame = CGRectMake(0, 0, 320, 480); 
[theMovie setControlStyle:MPMovieControlStyleNone]; 
[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(moviePlayBackDidFinish:) 
              name:MPMoviePlayerPlaybackDidFinishNotification 
              object:theMovie]; 
[self.view addSubview:theMovie.view];  
[theMovie play]; 
+0

Merci. C'est une différence où dans le fichier de projet se trouve? –

+0

Voici une erreur générée par votre code: 2013-05-02 16: 15: 13.592 iphone [15317: 18e03] *** Terminaison de l'application en raison d'une exception non interceptée 'NSInvalidArgumentException', raison: '*** - [NSURL initFileURLWithPath: ]: nil string parameter ' –

+0

c'est seulement une supposition mais si votre mainBundle de NSBundle renvoie zéro c'est peut-être parce que vous avez créé un type de projet de l'outil de ligne de commande ... voyez ceci: http://stackoverflow.com/questions/3949368/ nsbundle-pathforresource-is-null – nzs

0

Vous pouvez utiliser la méthode suivante pour obtenir une image miniature pour une URL vidéo donnée,

-(UIImage *) giveThumbofVideoUrl:(NSURL *) url{ 
      NSString *urlString = [url absoluteString]; 
      AVAsset *asset = [AVAsset assetWithURL:url]; 
      AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc]initWithAsset:asset]; 
      imageGenerator.appliesPreferredTrackTransform = YES; 
      //imageGenerator.maximumSize = CGSizeMake(320,480); 
      CMTime time = CMTimeMake(1, 1); 
      CGImageRef imageRef = [imageGenerator copyCGImageAtTime:time actualTime:NULL error:NULL]; 
      UIImage *image = [UIImage imageWithCGImage:imageRef]; 
      CGImageRelease(imageRef); 
    return image; 
    } 

Comment vous pouvez l'utiliser?,

NSString*thePath=[[NSBundle mainBundle] pathForResource:@"IMG_0003" ofType:@"m4v"]; 
NSURL *movieUrl=[NSURL fileURLWithPath:thePath]; 
UIImage *thumbnail = [self giveThumbofVideoUrl:movieUrl]; 
+0

Merci pour cette réponse rapide, mais j'ai besoin de lire ce fichier. MPMoviePlayerController sera donc la solution parfaite. Je peux lire des fichiers de http, mais localy, non. –

+0

Assurez-vous de définir globalement la variable moviePlayer, @property (nonatomic, strong) MPMoviePlayerController * player; aussi vous devriez ajouter le moviePlayer.view comme une sous-vue à l'auto.view –

+0

de http url player fonctionne très bien, mais ne fonctionne pas, quand je change l'URL de http à local. –

0

MPMoviePlayerController est maintenant dépréciée. J'ai donc utilisé AVPlayerViewController. et écrit le code suivant:

NSURL *videoURL = [NSURL fileURLWithPath:filePath]; 
    //filePath may be from the Bundle or from the Saved file Directory, it is just the path for the video 
    AVPlayer *player = [AVPlayer playerWithURL:videoURL]; 
    AVPlayerViewController *playerViewController = [AVPlayerViewController new]; 
    playerViewController.player = player; 
    //[playerViewController.player play];//Used to Play On start 
    [self presentViewController:playerViewController animated:YES completion:nil]; 

S'il vous plaît ne pas oublier d'importer des cadres suivants:

#import <AVFoundation/AVFoundation.h> 
#import <AVKit/AVKit.h> 

Hope this helps ..

Questions connexes