2010-07-12 7 views
1

J'ai ce code essayant d'exécuter une vidéo sur le simulateur iPhone 4. Le problème est qu'il semble que ça charge le lecteur, mais une demi seconde plus tard, il charge un écran arrière sur l'ensemble de l'application en désactivant le toucher et tout, et il semble qu'il ne joue pas la vidéo aussi, parce que je peux J'entends rien.MPMoviePlayerViewController Black Problème d'écran!

Des idées ?!

MPMoviePlayerViewController *mp = 
[[MPMoviePlayerViewController alloc] initWithContentURL:videoUrl]; 

if (mp) { 
    mp.moviePlayer.scalingMode = MPMovieScalingModeFill; 
    mp.moviePlayer.movieSourceType = MPMovieSourceTypeFile; 
    [mp.moviePlayer play]; 

    [self presentMoviePlayerViewControllerAnimated:mp]; 

    [mp release]; 
} 

Répondre

1

Je crois que le problème est causé par la libération de MPMoviePlayerViewController. Conservez simplement le contrôleur jusqu'à ce que vous en ayez fini avec.

Avant la "[publication de mp];" ajoutez cette ligne pour économiser la valeur.

self.moviePlayerViewController = mp; 

puis mettre à jour votre méthode dealloc pour faire la sortie:

- (void)dealloc { 
    [_moviePlayerViewController release], _moviePlayerViewController = nil; 
    [super dealloc]; 
} 

Ajouter synthétisent en haut de votre fichier .m:

@synthesize moviePlayerViewController = _moviePlayerViewController; 

Ajouter le defination à la @interface de votre fichier .h:

MPMovieViewController *_moviePlayerViewController; 

Ajouter la propriété à votre fichier .h:

@property (readwrite, retain) MPMovieViewController *moviePlayerViewController; 

Vous pouvez avoir besoin des en-têtes dans votre tête:

#import <MediaPlayer/MediaPlayer.h> 
#import <MediaPlayer/MPMoviePlayerViewController.h> 

Vous pouvez aussi avoir besoin d'équilibrer votre « presentMoviePlayer » appel à la rejeter quelque part:

[self dismissMoviePlayerViewControllerAnimated]; 

Ouf, code partout. De toute façon, si vous avez terminé la ressource au début, vous pourrez peut-être la libérer plus tôt en utilisant NotificationManager pour regarder MPMoviePlayerPlaybackDidFinishNotification. Il y a beaucoup d'exemples de cela, alors je ne le répéterai pas.

Espérons que cela aide.

+0

Je ne crois pas que la réponse est correcte, mp est conservé quand il est représenté de façon modale. Ce n'est pas un problème de mémoire .. – talkol

0

Ce code J'utilise:

MPMoviePlayerViewController *movieViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:contentUrl]]; 
movieViewController.moviePlayer.movieSourceType = MPMovieSourceTypeFile; 
[self presentMoviePlayerViewControllerAnimated:movieViewController]; 
[movieViewController release]; 

Il semble fonctionner très bien pour moi. Deux notes:

  • Certains simulateurs (comme l'iOS 5.0 en cours) plantage lors de la lecture d'un film, mais il fonctionne sur un vrai appareil
  • si vous quittez la partie movieSourceType, un écran noir est affiché pendant environ une deuxième avant que le film commence
Questions connexes