ios objective-c video mpmovieplayercontroller

ios - MPMoviePlayerController que muestra una pantalla negra vacía



objective-c video (13)

¡debe hacer eso con CGRectMake (0, 0, 0, 0) en la devolución de llamada finalizada!

-(void)playMovieAtURL:(NSURL*)theURL { MPMoviePlayerController* theMovie=[[MPMoviePlayerController alloc] initWithContentURL:theURL]; theMovie.scalingMode=MPMovieScalingModeAspectFill; theMovie.view.frame = CGRectMake(2, 246, 317, 70); [self.view addSubview:theMovie.view]; // Register for the playback finished notification. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myMovieFinishedCallback:) name:MPMoviePlayerPlaybackDidFinishNotification object:theMovie]; // Movie playback is asynchronous, so this method returns immediately. [theMovie play]; } // When the movie is done,release the controller. -(void)myMovieFinishedCallback:(NSNotification*)aNotification { MPMoviePlayerController* theMovie=[aNotification object]; [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:theMovie]; theMovie.view.frame = CGRectMake(0, 0, 0, 0); // Release the movie instance created in playMovieAtURL [theMovie release]; }

Utilizo MPMoviePlayerController para reproducir un archivo local en mi carpeta de documentos de aplicaciones que he descargado para una URL del servidor:

itemMoviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:fileURL]; [self.view addSubview:itemMoviePlayerController.view]; itemMoviePlayerController.fullscreen = YES; itemMoviePlayerController.movieSourceType = MPMovieSourceTypeFile; itemMoviePlayerController.initialPlaybackTime = -1.0; [itemMoviePlayerController play];

Cuando reproduzco un archivo .mov justo después de descargarlo, aparece una pantalla negra vacía y la UI de la aplicación no se puede usar. Pero si reproduce el mismo archivo local la próxima vez, se reproduce bien. Incluso verifiqué que playState y localState para MPMoviePlayerController parecen estar bien. ¿Cuál podría ser el motivo de una pantalla negra vacía?


A mi me pasó lo mismo. Resultó que había intentado reproducir la película mientras el UIImagePicker no había sido descartado todavía.

En mi UIImagePickerDelegate , primero tuve que cerrar el UIImagePicker Popup y luego abrir el ViewController administraba el MPMediaPlayerController :

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)infoDict { //the first thing to do: dismiss the media picker if ([ipPop isPopoverVisible]) { [ipPop dismissPopoverAnimated:ANIMATION_SETTING]; } myMediaPlayerViewController * playerVC = [[myMediaPlayerViewController alloc] initWithMediaDict:infoDict]; [self.navigationController pushViewController:playerVC animated:ANIMATION_SETTING]; }


Además, si usa URL http, asegúrese de desactivar la seguridad del transporte de aplicaciones en su archivo de proyectos * .plist . También causará una pantalla negra.

Agregue el siguiente código:

<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key><true/> </dict>

Aquí:

[INSERT CODE ABOVE HERE] </dict> </plist> ----- BOTTOM OF PLIST FILE


Debe conservar su instancia de MPMoviePlayerController, es decir, como una propiedad o una variable de instancia. La referencia al reproductor de películas se pierde si no la retiene.


Estaba teniendo un problema similar. Después de la reproducción, aparece una pantalla vacía que me impide volver a reproducir el video. Bueno, aquí está mi trabajo. De esa manera, el botón de reproducción no desaparece.

[self.movieController stop]; [self.movieController prepareToPlay]; [self.movieController pause];


Este es el código que estoy usando para reproducir un archivo desde la URL:

MPMoviePlayerViewController *movieViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:contentUrl]]; movieViewController.moviePlayer.movieSourceType = MPMovieSourceTypeFile; [self presentMoviePlayerViewControllerAnimated:movieViewController]; [movieViewController release];

Parece funcionarme bien. Dos notas:

  • Algunos simuladores (como el iOS 5.0 actual) fallan cuando se reproduce una película, pero funciona en un dispositivo real
  • Si movieSourceType parte movieSourceType , se muestra una pantalla negra durante aproximadamente un segundo antes de que comience la película

Este problema parece solucionado después de actualizar el dispositivo iOS a 5.0.
Parece que el problema de iOS SDK para la versión anterior


Lo arreglé poniendo

@property (strong, nonatomic) MPMoviePlayerController *moviePlayer;

en mi archivo .h y llamando a self.moviePlayer en todo mi código y ¡funcionó!


Necesita usar MPMoviePlayerViewController en su lugar. Observe la palabra "Ver" allí.


Podría tratar de poner [itemMoviePlayerController prepareToPlay]; antes de que [itemMoviePlayerController play];

La forma preferida por Apple para mostrar un único video de pantalla completa es presentar un modal MPMoviePlayerViewController (como dijo Hollance). Para presentarlo, debes usar algo como:

moviePlayerViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:fileURL]; [self presentMoviePlayerViewControllerAnimated:moviePlayerViewController]; [itemMoviePlayerController play];

Esto está documentado por Apple aquí

Puede leer allí que debe mantener una referencia a su MPMoviePlayerViewController para descartarlo más tarde con

[self dismissMoviePlayerViewControllerAnimated:moviePlayerViewController] .


Tuve el mismo problema y me volví loco. Funcionaría en un controlador de vista fino (audio y video), pero no funcionaría en otro (pantalla negra con solo audio). Al final, todo lo que hice fue CAMBIAR EL ORDEN de las llamadas: simplemente esperé hasta que terminé de configurar el reproductor de películas antes de agregarlo a la vista. En otras palabras, llamé a "addSubview" en la línea justo antes de la llamada para "jugar".


Tuve el mismo problema, lo resolví cambiando la extensión del archivo que se estaba reproduciendo de .mpg a .mp4. aparentemente, MPMoviePlayerController espera una extensión correcta, aunque de la documentación no es claro para mí que este sea un requisito:

http://developer.apple.com/library/ios/#documentation/mediaplayer/reference/MPMoviePlayerController_Class/Reference/Reference.html

Formatos admitidos Esta clase reproduce cualquier película o archivo de audio compatible con iOS. Esto incluye contenido transmitido y archivos de longitud fija. Para archivos de película, esto normalmente significa archivos con las extensiones .mov, .mp4, .mpv y .3gp y utilizando uno de los siguientes estándares de compresión:


Espero que esto sea de ayuda. Resolví este problema en mi proyecto

-(void)startPlayingMovie { NSLog(@"startPlayingMovie"); NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Start_video" ofType:@"mov"]]; moviePlayer = [[MPMoviePlayerViewController alloc] initWithContentURL:url]; moviePlayer.view.frame = CGRectMake(0, 0, self.view.bounds.size.height, self.view.bounds.size.width); [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer.moviePlayer]; moviePlayer.moviePlayer.controlStyle = MPMovieControlStyleNone; moviePlayer.moviePlayer.shouldAutoplay = YES; [self presentMoviePlayerViewControllerAnimated:moviePlayer]; [moviePlayer.moviePlayer setFullscreen:YES animated:NO]; NSLog(@"endPlayingMovie"); }