Frage

Ich baue eine Anwendung einen XML-Feed mit einem Link zu einem Film enthält, die Ich mag würde, wenn der Benutzer klickt auf einem Bild spielen.

Zu diesem Zweck ich bin mit dem MPMoviePlayerViewController. Testen der Anwendung auf dem Simulator hat mir die erwarteten Ergebnisse bisher jedoch, wenn ich die App auf einem iPhone zu testen, der Spieler spielt richtig, aber ohne Ton.

Ich habe im Internet sah, wo ein paar Artikel mir gesagt, dass der App-Leistung viel von der Leistung unterscheidet sich der Simulator gibt Ihnen. Deshalb habe ich ein „Leck“ Test mit Instrumenten, die mir sagte, dass, wenn ich einen Film zu spielen begann, bekam einige Bytes fallen gelassen oder durchgesickert. Könnte das etwas mit dem plötzlichen Abfall des Schalls zu tun? Wenn ja, wie würde ich es lösen?

Es ist meine erste Erfahrung von Apps auf dem iPhone zu testen, so habe ich mich ziemlich schockiert zu sehen, wie schlecht die App ausgeführt. 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, dass Sie das Problem leuchten können.

Vielen Dank im Voraus,

/ Brinck10

War es hilfreich?

Lösung

Sie haben hier einige sehr ernste Verwirrung bekam. Sie sollten nicht sowohl eine MPMoviePlayerViewController und eine MPMoviePlayerController erschaffen. Verwenden Sie 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 ersetzt werden.

Lassen Sie uns Tropfen zurück zehn Meter und Punt. Der einfache Weg, um einen Film / Stream-Ton / was auch immer zu spielen, ist MPMoviePlayerViewController zu verwenden. Es ist ein View-Controller, so dass nur sie schiebt, 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];

Dies schafft die MPMoviePlayerController und seine Ansicht und präsentiert die ganze Laden für Sie im Vollbild-Modus. Simpel und einfach. Die modale Ansicht ist auch für Sie entlassen, wenn der Benutzer auf Fertig Taps.

Mit MPMoviePlayerController ist mehr beteiligt. Es ist kein UIViewController. Aber es hat einen Blick. 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];

Das macht den Film Blick Teil Ihrer Schnittstelle. Wenn der Film ein echter Film ist, überlässt es dem Benutzer frei, um in den Vollbildmodus zu wechseln oder nicht. Wenn der Film nur einen Ton ist, muss der Benutzer nicht eine Möglichkeit hat, das zu tun; es gibt nur einen Stop / Go-Taste und ein Schieber.

In beiden Fällen gibt es einen MPMoviePlayerController irgendwo in der Geschichte, so dass Sie für die Benachrichtigungen anmelden können, sagen, es zu spielen / Stop, etc. Aber nicht zu verwechseln oder die beiden Ansätze verschmelzen. Das ist wahrscheinlich die Ursache aller Ihre Fragen hier.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top