Rejeter MPMoviePlayerViewController en cas d'erreur de lecture
-
26-09-2019 - |
Question
J'ai un problème avec le MPMoviePlayerViewController: Si le contrôleur ne peut pas trouver le film à l'URL spécifiée, il affiche un écran blanc et je ne peux pas la faire à proximité
.Voici comment je lance le lecteur vidéo:
- (void) playVideo:(NSString*)path
{
NSURL* url = [NSURL URLWithString:path];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil];
double osversion = [[[UIDevice currentDevice] systemVersion] doubleValue];
if (osversion >= 3.2)
{
mplayerVC = [[MPMoviePlayerViewController alloc] initWithContentURL:url];
if (mplayerVC)
{
mplayerVC.moviePlayer.movieSourceType = MPMovieSourceTypeFile;
[mplayerVC.moviePlayer play];
mplayerVC.moviePlayer.shouldAutoplay = TRUE;
[self presentMoviePlayerViewControllerAnimated:mplayerVC];
//[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerLoadStateChanged:) name:MPMoviePlayerLoadStateDidChangeNotification object:nil];
}
}
}
et voilà comment moviePlayBackDidFinish: ressemble à la méthode de cette
- (void) moviePlayBackDidFinish:(NSNotification*)notification
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:nil];
NSError* error = [[notification userInfo] valueForKey:@"error"];
if (error != nil)
{
// Movie ended with an error
DLog(@"error=%@", error);
}
else
{
// Movie ended successfully
}
[self dismissMoviePlayerViewControllerAnimated];
SAFE_DEL(mplayerVC);
}
L'écran blanc ne se produit que si l'URL pointe mauvais
La solution
Jamais les gars de l'esprit, je compris.
Apparemment, dans la méthode moviePlaybackDidFinish vous devez appeler
[player stop];
avant de rejeter le contrôleur.
Au-dessus, le joueur est l'objet MPMoviePlayerController obtenu comme ceci:
MPMoviePlayerController *player = [notification object];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow