11 votes

MPMoviePlayerController et HTTP Live Streaming

Chacun. J'essaie de comprendre comment lire un flux en direct à l'aide de MPMoviePlayerController. Pour les tests, j'utilise l'exemple de flux de test d'Apple. http://devimages.apple.com/iphone/samples/bipbopall.html . Cela fonctionne parfaitement avec UIWebView, mais je n'arrive pas à le faire fonctionner avec MPMoviePlayerController. Voici mon morceau de code :

NSURL *mediaURL = [NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbopall.html"];
MPMoviePlayerController *mp = [[MPMoviePlayerController alloc] initWithContentURL:mediaURL];
[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(moviePlayBackDidFinish:) 
                                             name:MPMoviePlayerPlaybackDidFinishNotification 
                                           object:nil]; 

[mp setControlStyle:MPMovieControlStyleFullscreen];
[mp setMovieSourceType:MPMovieSourceTypeStreaming];
[mp setFullscreen:YES];

[self.view addSubview:[mp view]];

[mp prepareToPlay];
[mp play];

En fait, le contrôleur reçoit la notification MPMoviePlayerPlaybackDidFinishNotification sans rien jouer. Où se situe le problème ?

17voto

Robert Höglund Points 5572

Votre problème se situe probablement au niveau de l'URL. MPMoviePlayerController souhaite que l'URL renvoie directement au fichier que vous souhaitez lire. Vous fournissez l'URL d'un HTML que le lecteur de films ne comprend pas. C'est pourquoi il fonctionne dans UIWebView puisqu'un navigateur web comprend HTML . Si vous voulez plus d'informations sur ce qui ne va pas, vous pouvez vérifier l'erreur en procédant de la manière suivante, citée dans la documentation d'Apple :

Pour vérifier s'il y a des erreurs s'inscrire à l'option MPMoviePlayerContentPreloadDidFinishNotification ou MPMoviePlayerPlaybackDidFinishNotification . En cas d'erreur, ces contiennent un objet NSError disponible à l'aide de la clé @"error" dans le dictionnaire userInfo de la notification.

Il ressemblerait à quelque chose comme :

- (void) moviePlayBackDidFinish:(NSNotification*)notification {
    NSError *error = [[notification userInfo] objectForKey:@"error"];
    if (error) {
        NSLog(@"Did finish with error: %@", error);
    }
}

Si vous voulez essayer de jouer cet échantillon, vous pouvez essayer d'accéder directement à l'URL du flux, qui serait : http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8

5voto

Vlad Papko Points 11180

Vous devez utiliser le lien direct vers le fichier de la liste de lecture : http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8

NSURL *mediaURL = [NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"];
MPMoviePlayerController *mediaPlayer = [[MPMoviePlayerController alloc] initWithContentURL:mediaURL];

0voto

Rog Points 12427

Essayer object:mp au lieu de object:nil dans votre NSNotification

0voto

dung Points 89

@Andrew :

Voici la documentation d'Apple sur la diffusion en direct par HTTP, y compris un exemple de code http://developer.apple.com/library/ios/search/index.php?Search=HTTP+Live+Streaming+Overview

Dung.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X