2010-11-29 4 views
11

jeder. Ich versuche herauszufinden, wie man Livestream mit MPMoviePlayerController spielt. Zum Testen verwende ich Apples Test Stream Beispiel http://devimages.apple.com/iphone/samples/bipbopall.html. Es funktioniert perfekt in UIWebView, aber ich kann es nicht mit MPMoviePlayerController arbeiten. Es ist mein Stück Code:MPMoviePlayerController und HTTP Live Streaming

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]; 

Eigentlich der Controller BEKOMMT MPMoviePlayerPlaybackDidFinishNotification, ohne etwas zu spielen. Wo ist das Problem?

+0

„*** Beenden app aufgrund nicht abgefangene Ausnahme‚NSInvalidArgumentException‘Grund:‚Ein AVPlayerItem kann nicht mit mehr als einer Instanz von AVPlayer in Verbindung gebracht werden '" – openfrog

Antwort

17

Ihr Problem wahrscheinlich mit der URL ist. MPMoviePlayerController möchte die URL direkt zu der Datei, die Sie wiedergeben möchten. Sie geben die URL für eine HTML Seite an, die der Filmspieler nicht versteht. Deshalb funktioniert es in UIWebView, da ein Webbrowser HTML versteht. Wenn Sie weitere Informationen wünschen, was falsch ist können Sie den Fehler überprüfen Sie folgende Punkte zu tun, von der Apple-Dokumentation zitiert:

für Fehler in URL Laden zu überprüfen, Register für die MPMoviePlayerContentPreloadDidFinishNotification oder MPMoviePlayerPlaybackDidFinishNotification Benachrichtigungen. Bei einem Fehler enthalten diese Benachrichtigungen ein NSError Objekt, das mit dem @ "error" Schlüssel im UserInfo Wörterbuch der Benachrichtigung verfügbar ist.

Es wäre in etwa so aussehen:

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

Wenn Sie diese Probe versuchen wollen und spielen Sie versuchen können, und die URL direkt für den Stream zugreifen, die sein würde: http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8

+0

Vielen Dank - die URL war das eigentliche Problem. Eine weitere Frage: MPMoviePlayerController - ist das die richtige Wahl, um Live-Audio-Streams (wie Internetradio) abzuspielen? Ich suchte nach Möglichkeiten, HTTP-Live-Streaming zu implementieren, und kam zu dem Schluss, dass der MoviePlayer das war, was ich brauchte. – Andrew

+0

Gern geschehen. Ich habe selbst kein Streaming gemacht, daher kann ich nicht sagen, welcher Ansatz der Beste ist. –

0

Versuchen object:mp statt object:nil in Ihrem NSNotification

5

Sie direkten Link verwenden sollten Listendatei zu spielen: 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];