2010-07-04 5 views
3

J'utilisais MPMoviePlayer pour lire une courte vidéo dans mon application sans problèmes dans le SDK 3.1.3. J'ai apporté les modifications au code dans SDK 4 mais la vidéo ne joue pas. Je viens d'obtenir un écran noir et audio. Le Centre de développement Apple n'a pas d'exemple de code pour cette classe pour le dernier SDK. Le code que j'utilise est le suivant:problème en utilisant MPMovieController dans iPhone SDK 4.0

- (void)viewDidLoad { 

    [super viewDidLoad]; 

     //videoPlayer is a MPMoviePlayerController object defined in the header file of the view controller 

    if (videoPlayer == nil){ 
     NSString * videoPath = [[NSBundle mainBundle] pathForResource:@"myvideo" ofType:@"mp4"]; 
     if (videoPath == NULL){ 
      return; 
     } 
     NSURL * videoURL = [NSURL fileURLWithPath:videoPath]; 

     videoPlayer = [[MPMoviePlayerController alloc] initWithContentURL:videoURL]; 
     videoPlayer.controlStyle = MPMovieControlStyleNone; 
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playbackFinished:) name:@"MPMoviePlayerPlaybackDidFinishNotification" object:movieController.moviePlayer]; 

     [videoPlayer play]; 
     [videoPlayer setFullscreen:YES]; 
     [self.view addSubview:videoPlayer.view]; 


    } 

} 

Ce qui précède résulte uniquement de la lecture de l'audio avec un écran noir. La notification est appelée correctement à la fin de la lecture.

Lorsque ce qui précède n'a pas fonctionné, alors j'ai même essayé d'utiliser la nouvelle classe MPMoviePlayerViewController comme suit:

- (void)viewDidLoad { 

    [super viewDidLoad]; 
    NSString * videoPath = [[NSBundle mainBundle] pathForResource:@"myvideo" ofType:@"mp4"]; 

    if (videoPath == NULL){ 
     return; 
    } 
    NSURL * videoURL = [NSURL fileURLWithPath:videoPath]; 

     //movieController is an MPMoviePlayerViewController object defined in the header file of view controller 

    movieController = [[MPMoviePlayerViewController alloc] initWithContentURL:videoURL]; 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playbackFinished:) name:@"MPMoviePlayerPlaybackDidFinishNotification" object:movieController.moviePlayer]; 

    [movieController.moviePlayer setFullscreen:YES]; 
    [movieController.moviePlayer play]; 
    [self presentMoviePlayerViewControllerAnimated:movieController]; 
} 

Même problème persiste - Je peux entendre l'audio et la notification à la fin de la lecture est appelée comme prévu. Cependant, je vois juste un écran noir au lieu de la vidéo.

Il n'y a rien de mal dans l'encodage de la vidéo parce que la même vidéo joue bien dans iTunes ainsi que sur mon iPod Touch dans la liste de lecture de vidéos régulières.

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

Merci à l'avance

Répondre

3
problème

résolus - au profit de ceux qui sont coincés sur un problème similaire, la solution est de créer explicitement le cadre de la vue du MPMoviePlayerController comme suit:

j'ai changé les lignes:

[videoPlayer play]; 

[videoPlayer setFullscreen:YES]; 

[self.view addSubview:videoPlayer.view]; 

à ce qui suit:

[videoPlayer prepareToPlay]; 

[videoPlayer play]; 

[self.view addSubview:videoPlayer.view]; 

videoPlayer.view.frame = CGRectMake(0.0, 0.0, 480.0, 320.0); //this is explicitly added and solves the problem 
Questions connexes