Domanda

Sto costruendo una domanda contenente un feed XML con un link ad un film, che mi piacerebbe giocare ogni volta che l'utente fa clic su un'immagine.

A tal fine sto usando il MPMoviePlayerViewController. Testare l'applicazione sul simulatore mi ha dato i risultati sperati fino ad ora, tuttavia, quando prova l'applicazione su un iPhone, il lettore riproduce correttamente, ma senza suono.

Ho guardato su internet dove alcuni articoli mi hanno detto che le prestazioni dell'applicazione differisce molto dalla performance del simulatore ti dà. Quindi ho fatto un test di "fuga" con strumenti, che mi ha detto che ogni volta che ho iniziato a giocare un film, alcuni byte siamo lasciati o disperse. che potrebbe avere qualcosa a che fare con l'improvviso calo del suono? Se è così, come potrei risolverlo?

E 'la mia prima esperienza di testare le applicazioni su iPhone, così ho preso abbastanza scioccato di vedere quanto male l'applicazione eseguita. Ecco il codice per la MoviePlayer-parte.

#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

Spero che tu possa illuminare il problema.

Grazie in anticipo,

/ Brinck10

È stato utile?

Soluzione

Hai qualche molto grave confusione qui. Non si dovrebbe essere la creazione sia un MPMoviePlayerViewController ed un MPMoviePlayerController. Utilizzare uno o l'altro. E queste linee non hanno senso:

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

Si sta creando una MPMoviePlayerController e assegnandolo a giocatore, ma poi buttarlo via, sostituendolo esistente di MPMoviePlayerViewController MoviePlayer.

dieci iarde caduta di schiena di Let e ??punt. Il modo più semplice per riprodurre un filmato / flusso audio / qualunque cosa è quello di utilizzare MPMoviePlayerViewController. Si tratta di un controller di vista, quindi basta spingere là dove si usa un UIViewController. Più semplice è quello di mostrare che modale:

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

Questo crea l'MPMoviePlayerController e la sua vista e presenta tutta la baracca per voi solo in modalità a schermo intero. Semplice e facile. La vista modale è anche respinto per voi quando l'utente tocca Fatto.

Utilizzando MPMoviePlayerController è più coinvolto. NON è un UIViewController. Ma ha una vista. Il tuo lavoro, se si desidera che l'utente per vedere qualcosa, è quello di afferrare questo punto di vista, dare una cornice, e bastone nella tua interfaccia:

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

Questo rende la visione di film parte della vostra interfaccia. Se il film è un vero film, lascia l'utente libero di passare in modalità a schermo intero oppure no. Se il film è solo un suono, l'utente non dispone di un modo di fare che; c'è solo un pulsante di arresto / go e un cursore.

In entrambi i casi v'è una qualche parte MPMoviePlayerController nella storia in modo da poter registrare per le sue notifiche, dillo alla play / stop, ecc, ma non confondere o fondere i due approcci. Questa è probabilmente la causa di tutti i problemi qui.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top