2012-08-23 1 views
8

J'ai créé un nouveau projet avec le ViewController.m suivant. Quand je cours l'application je peux voir une boîte de l'origine/taille prévue (38, 100, 250, 163) mais elle est noire et aucune vidéo ne joue. Il y a une sortie étrange dans Xcode:Impossible de lire la vidéo avec MPMoviePlayerViewController

2012-08-23 15:36:45.559 VideoTest1[11398:c07] [MPAVController] Autoplay: Disabling autoplay for pause 
2012-08-23 15:36:45.560 VideoTest1[11398:c07] [MPAVController] Autoplay: Disabling autoplay 
2012-08-23 15:37:18.186 VideoTest1[11398:c07] [MPAVController] Autoplay: Skipping autoplay, disabled (for current item: 1, on player: 0) 

Notez que la vidéo est convertie avec Videora iPhone Converter et joue ok dans Xcode (il est donc pas un problème vidéo); le chemin vers la vidéo est ok parce que quand je spécifie démo-iPhone1 (qui n'existe pas) je reçois une exception nulle. J'ai essayé en simulateur et sur iPhone: toujours en boîte noire. Des idées?

#import "ViewController.h" 
#import <MediaPlayer/MediaPlayer.h> 

@interface ViewController() 

@end 

@implementation ViewController 
- (void)moviePlaybackComplete:(NSNotification *)notification 
{ 
    MPMoviePlayerController *moviePlayerController = [notification object]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self 
                name:MPMoviePlayerPlaybackDidFinishNotification 
                object:moviePlayerController]; 

    [moviePlayerController.view removeFromSuperview]; 
} 


- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    NSString *filepath = [[NSBundle mainBundle] pathForResource:@"demo-iPhone" ofType:@"mp4"]; 
    NSURL *fileURL = [NSURL fileURLWithPath:filepath]; 
    MPMoviePlayerController *moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:fileURL]; 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(moviePlaybackComplete:) 
               name:MPMoviePlayerPlaybackDidFinishNotification 
               object:moviePlayerController]; 
    [moviePlayerController.view setFrame:CGRectMake(38, 
                100, 
                250, 
                163)]; 
    [self.view addSubview:moviePlayerController.view]; 
    [moviePlayerController play]; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 
} 

@end 
+0

Avez-vous essayé avec d'autres vidéos? Peut-être un mp4 téléchargé sur vimeo? –

+0

Steve, la vidéo est vraiment bien parce qu'elle joue dans mon autre application avec exactement le même code. Mais ne peut toujours pas comprendre la différence. BTW j'ai ajouté la sortie Xcode. Peut-être que cela vous donnera une idée de ce qu'est le problème. – maxgrinev

Répondre

3

Je résoudre un problème similaire en ajoutant playercontroller.moviePlayer.movieSourceType = MPMovieSourceTypeFile;

+0

+1: cela m'a aidé .... merci une tonne ... –

2

Utilisez-vous ARC? Si c'est le cas, vous devez conserver le MPMoviePlayerController!

Ajouter à votre interface de

@property (nonatomic, strong) MPMoviePlayerController *controller; 

Vérifiez la dernière ligne de viewDidLoad

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    NSString *filepath = [[NSBundle mainBundle] pathForResource:@"demo-iPhone" ofType:@"mp4"]; 
    NSURL *fileURL = [NSURL fileURLWithPath:filepath]; 
    MPMoviePlayerController *moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:fileURL]; 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(moviePlaybackComplete:) 
              name:MPMoviePlayerPlaybackDidFinishNotification 
              object:moviePlayerController]; 
    [moviePlayerController.view setFrame:CGRectMake(38, 
               100, 
               250, 
               163)]; 
    [self.view addSubview:moviePlayerController.view]; 
    [moviePlayerController play]; 
    [self setController:moviePlayerController]; 
} 
+0

+1 pour la rétention. Trop de tutoriels montrent l'utilisation de variables temporaires. – DanneManne

13

Je viens de résoudre un problème similaire avec cette ligne de code. Les contrôleurs du lecteur apparaissent maintenant et la vidéo est parfaitement lisible:

@property (nonatomic, strong) MPMoviePlayerController *moviePlayer; 
// 
@synthesize moviePlayer = _moviePlayer; 
// 
[self.moviePlayer prepareToPlay]; 

Modifiez pour s'adapter à votre environnement.

+2

L'appel de "prepareToPlay" sur iPad/iOS6 a corrigé cela pour moi. Sans cela, "MPMoviePlayerLoadStateDidChangeNotification" n'a pas été envoyé car le lecteur n'a pas pris la peine de précharger la vidéo. – diachedelic

+1

Fixé pour moi aussi, avant que j'avais des écrans noirs sur iOS6 (tout en fonctionnant bien sur iOS5 et ci-dessous). – Dado

+0

cela a résolu mon problème, cependant, lors du chargement d'une autre vidéo à partir d'un splitView dans les 5 secondes, je peux toujours entendre l'audio de la vidéo précédente jusqu'à ce que les 5 secondes est en hausse ... quelqu'un a ce problème? Je pense à ajouter le framework AVFoundation juste pour essayer de contrôler les sessions audio. – whyoz

-2

Vérifiez également le format vidéo. J'ai continué à obtenir cette erreur avec mon exemple de vidéo .m4v (que j'ai téléchargé sur le site Web d'Apple). Finalement, j'ai essayé avec un clip vidéo différent qui était .mp4 et ça a bien fonctionné. Beaucoup d'erreurs sont encore apparues sur ma console.

2013-01-22 15:44:04.850 VideoTesting[4497:c07] [MPAVController] Autoplay: Likely to keep up or full buffer: 0 
2013-01-22 15:44:04.851 VideoTesting[4497:c07] [MPAVController] Autoplay: Skipping autoplay, not enough buffered to keep up. 
2013-01-22 15:44:04.853 VideoTesting[4497:c07] [MPAVController] Autoplay: Disabling autoplay for pause 
2013-01-22 15:44:04.853 VideoTesting[4497:c07] [MPAVController] Autoplay: Disabling autoplay 
2013-01-22 15:44:04.861 VideoTesting[4497:c07] [MPAVController] Autoplay: Enabling autoplay 

La vidéo est toujours diffusée.

Questions connexes