Pregunta

Estoy construyendo una aplicación que contiene una fuente XML con un enlace a una película, lo que me gustaría jugar cuando el usuario hace clic en una imagen.

Para ello estoy usando el MPMoviePlayerViewController. Prueba de la aplicación en el simulador me ha dado los resultados esperados hasta el momento, sin embargo, cuando me probar la aplicación en un iPhone, el reproductor reproduce correctamente, pero sin sonido.

He mirado en internet, donde algunos artículos me dijeron que el rendimiento de la aplicación difiere mucho de la actuación del simulador le da. Por lo tanto, hice una prueba de "fugas" con los instrumentos que me ha dicho que cuando empecé a jugar una película, algunos bytes momento se han descartado o hay escape. Podría tener algo que ver con la caída repentina de sonido? Si es así, ¿cómo podría resolverlo?

Es mi primera experiencia de probar aplicaciones en el iPhone, así que me sorprendió bastante ver lo mal que lleva a cabo la aplicación. Aquí está el código para el MoviePlayer partes.

#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

Espero que puedan iluminar el problema.

Gracias de antemano,

/ Brinck10

¿Fue útil?

Solución

Tienes alguna confusión muy serio aquí. No se debe crear tanto un MPMoviePlayerViewController y un MPMoviePlayerController. Usar uno u otro. Y estas líneas no tienen sentido:

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

Está creando un MPMoviePlayerController y asignarlo al jugador pero luego tirarlo a la basura, sustituyéndolo por su existente de MPMoviePlayerViewController MoviePlayer.

yardas diez disminución de vuelta de la batea y Let. La forma más fácil de reproducir una película / sonido corriente / lo que sea es utilizar MPMoviePlayerViewController. Es un controlador de vista, por lo que sólo lo empuja en la que utilizaría un UIViewController. Más simple es mostrarlo de forma modal:

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

Esto crea la MPMoviePlayerController y su punto de vista y presenta todo el asunto para usted en modo de pantalla completa solamente. Simple y fácil. La vista modal se descartó incluso para que cuando el usuario toca Listo.

El uso de MPMoviePlayerController es más complicado. No es una UIViewController. Pero tiene un punto de vista. Su trabajo, si desea que el usuario pueda ver nada, es agarrar ese punto de vista, darle un marco, y pegarlo en su interfaz:

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

Esto hace que la visión de la película parte de su interfaz. Si la película es una película de verdad, deja en libertad al usuario para cambiar al modo de pantalla completa o no. Si la película es sólo un sonido, el usuario no tiene una forma de hacer eso; sólo hay un botón de paro / marcha y un control deslizante.

De cualquier manera hay una MPMoviePlayerController algún lugar en la historia para que pueda inscribirse en sus notificaciones, dilo a reproducir / parada, etc. Pero no hay que confundir o combinar los dos enfoques. Eso es probablemente la causa de todos sus problemas aquí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top