0

Ich erstelle eine Anwendung, die einen XML-Feed mit einem Link zu einem Film enthält, den ich wiedergeben möchte, wenn der Benutzer auf ein Bild klickt.Drop von MPMoviePlayer Sound beim Testen der App auf dem Gerät

Zu diesem Zweck verwende ich den MPMoviePlayerViewController. Das Testen der App auf dem Simulator hat mir bisher die erwarteten Ergebnisse gebracht, aber wenn ich die App auf einem iPhone teste, spielt der Player korrekt, aber ohne Ton.

Ich habe im Internet nachgesehen, wo ein paar Artikel mir gesagt haben, dass die Leistung der App sich sehr von der Leistung unterscheidet, die der Simulator Ihnen bietet. Daher habe ich einen "Leak" -Test mit Instruments gemacht, der mir sagte, dass jedes Mal, wenn ich anfing, einen Film zu spielen, einige Bytes fallen gelassen wurden oder durchgesickert sind. Könnte das etwas mit dem plötzlichen Geräuschabfall zu tun haben? Wenn ja, wie würde ich es lösen?

Es ist meine erste Erfahrung mit dem Testen von Apps auf dem iPhone, also war ich ziemlich schockiert zu sehen, wie schlecht die App funktioniert. Hier ist der Code für den Movieplayer-Teil.

#pragma mark Video Controls 
-(void)playVideo:(id)sender{ 
    moviePlaying=TRUE; 
    MPMoviePlayerViewController *playerViewController; 
    playerViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:[data objectForKey:@"[att]url"]]]; 


    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:[playerViewController moviePlayer]]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidExitFullscreen:) name:MPMoviePlayerDidExitFullscreenNotification object:[playerViewController moviePlayer]]; 
    MPMoviePlayerController *player = [[[MPMoviePlayerController alloc] init] autorelease]; 
    player = [playerViewController moviePlayer]; 

    [self.view addSubview:playerViewController.view]; 
    player.controlStyle = MPMovieControlStyleDefault; 
    player.shouldAutoplay = YES; 
    [player setFullscreen:YES animated:YES]; 
} 

- (void)moviePlayBackDidExitFullscreen:(NSNotification*)notification{ 
    MPMoviePlayerViewController *moviePlayer = [notification object]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerDidExitFullscreenNotification object:moviePlayer]; 

    [moviePlayer.view removeFromSuperview]; 
    [moviePlayer release]; 
} 
- (void)moviePlayBackDidFinish:(NSNotification*)notification { 
    MPMoviePlayerViewController *moviePlayer = [notification object]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerDidExitFullscreenNotification object:moviePlayer]; 

    moviePlaying=FALSE; 
    [moviePlayer.view removeFromSuperview]; 
    [moviePlayer release]; 
} 
#pragma mark VideoControls End 

Ich hoffe, Sie können das Problem aufleuchten.

Vielen Dank im Voraus,

/Brinck10

+1

Nun, ich habe herausgefunden, dass es das Gerät war, das Ton ausgeschaltet wurde -.-, trotzdem würde ich immer noch gerne wissen, was ich tun kann, um die App aufhören zu lassen, Daten fallen zu lassen. –

Antwort

1

Sie hier einige sehr ernste Verwirrung haben. Sie sollten keinen MPMoviePlayerViewController und keinen MPMoviePlayerController erstellen. Verwenden Sie das eine oder das andere. Und diese Zeilen keinen Sinn machen:

MPMoviePlayerController *player = 
    [[[MPMoviePlayerController alloc] init] autorelease]; 
player = [playerViewController moviePlayer]; 

Sie sind ein MPMoviePlayerController erstellen und zu Spieler zuweisen, aber dann ist es weg zu werfen, ist es Ihre bestehenden MPMoviePlayerViewController der Movieplayer ersetzen.

Lassen Sie uns zehn Yards und Punt fallen. Der einfachste Weg, um einen Film/Stream-Sound/was auch immer zu spielen, ist die Verwendung von MPMoviePlayerViewController. Es ist ein View-Controller, also schieben Sie ihn einfach dahin, wo Sie einen UIViewController verwenden würden. Einfachstes ist es zu zeigen, modal:

NSURL* m = // whatever; 
MPMoviePlayerViewController* mpvc = 
    [[MPMoviePlayerViewController alloc] initWithContentURL: m]; 
[self presentModalViewController:mpvc animated:YES]; 
[mpvc release]; 

Das den MPMoviePlayerController und seine Ansicht erstellt und präsentiert den ganzen Kram für Sie in nur Vollbild-Modus. Simpel und einfach. Die modale Ansicht wird sogar für Sie ausgeblendet, wenn der Benutzer auf Fertig klickt.

Verwenden MPMoviePlayerController ist mehr beteiligt. Es ist kein UIViewController. Aber es hat eine Aussicht. Ihre Arbeit, wenn der Benutzer möchte, etwas sehen, ist diese Ansicht zu greifen, geben Sie ihm einen Rahmen, und halten Sie ihn auf Ihrer Schnittstelle:

NSURL* m = // whatever; 
MPMoviePlayerController* mp = 
    [[MPMoviePlayerController alloc] initWithContentURL:m]; 
self.mpc = mp; // property with retain policy 
[mp release]; 
self.mpc.view.frame = CGRectMake(10, 10, 300, 230); 
[self.view addSubview:self.mpc.view]; 

Dies macht den Film Blick Teil Ihrer Schnittstelle. Wenn der Film ein echter Film ist, kann der Benutzer in den Vollbildmodus wechseln oder nicht. Wenn der Film nur ein Ton ist, hat der Benutzer keine Möglichkeit, dies zu tun; Es gibt nur eine Stop/Go-Taste und einen Schieberegler.

Irgendwo gibt es einen MPMoviePlayerController irgendwo in der Geschichte, so dass Sie für seine Benachrichtigungen registrieren können, sagen Sie es zu spielen/zu stoppen, etc. Aber verwechseln Sie nicht die beiden Ansätze. Das ist wahrscheinlich der Grund für all Ihre Probleme hier.

+0

Danke Matt! Ich werde es übers Wochenende untersuchen und dann zurückkommen. –

Verwandte Themen