visuales sensibilidad pantalla efectos efecto como colores color cambio cambiar calibrar ios mpmovieplayercontroller fullscreen ios6

sensibilidad - MPMoviePlayerController se interrumpe/detiene después de ir a pantalla completa en iOS6



mi iphone cambio de color la pantalla (11)

¿Está deteniendo el video en viewWillDisappear: o viewDidDisappear: :? Se llama a esos métodos cuando un video ingresa a pantalla completa en iOS 6, pero no en ninguna versión anterior de iOS ( se ha presentado un informe en Open Radar para este "error"). Publiqué esta solución temporal en una pregunta similar:

Mi solución temporal hasta que se solucione el error es verificar el valor booleano en fullscreen del jugador en viewWillDisappear: y / o viewDidDisappear: Si devuelve YES , la película entra en modo de pantalla completa y debe abstenerse de hacer cualquier cosa que pueda interrumpirla.

Tengo un MPMoviewPlayerViewController integrado en un objeto UIView . Cuando inicio el reproductor en el modo integrado, todo funciona bien y como se esperaba. Si el usuario toca el interruptor de pantalla completa (o si cambio a pantalla completa programáticamente usando setFullscreen:animated ), el reproductor pasa a pantalla completa, la película se reproduce durante otro segundo y luego la pantalla se vuelve negra con solo un mensaje " Cargando ... " .

Este comportamiento solo aparece con iOS 6 (también iPad 6.0 Simulator), en dispositivos que ejecutan iOS 5, todo funciona como debe.

La fuente de la película es un archivo local del paquete de aplicaciones.

Al reproducir y entrar en pantalla completa, la salida de depuración es la siguiente:

2012-09-26 15:24:48.251 [39895:c07] [MPAVController] Autoplay: Disabling autoplay for pause 2012-09-26 15:24:48.252 [39895:c07] [MPAVController] Autoplay: Disabling autoplay 2012-09-26 15:24:48.262 [39895:c07] [MPAVController] Autoplay: Enabling autoplay 2012-09-26 15:24:48.265 [39895:c07] [MPAVController] Autoplay: Likely to keep up or full buffer: 0 2012-09-26 15:24:48.266 [39895:c07] [MPAVController] Autoplay: Skipping autoplay, not enough buffered to keep up. 2012-09-26 15:24:48.267 [39895:c07] [MPAVController] Autoplay: Likely to keep up or full buffer: 0 2012-09-26 15:24:48.268 [39895:c07] [MPAVController] Autoplay: Skipping autoplay, not enough buffered to keep up. 2012-09-26 15:24:48.276 [39895:c07] [MPAVController] Autoplay: Skipping autoplay, disabled (for current item: 0, on player: 1) 2012-09-26 15:24:48.286 [39895:c07] [MPCloudAssetDownloadController] Prioritization requested for media item ID: 0 2012-09-26 15:24:48.938 [39895:c07] [MPAVController] Autoplay: Enabling autoplay 2012-09-26 15:24:48.940 [39895:c07] [MPAVController] Autoplay: Enabling autoplay 2012-09-26 15:24:48.954 [39895:c07] [MPAVController] Autoplay: Skipping autoplay, disabled (for current item: 0, on player: 1) 2012-09-26 15:24:49.006 [39895:c07] [MPAVController] Autoplay: Enabling autoplay 2012-09-26 15:24:49.012 [39895:c07] [MPAVController] Autoplay: Skipping autoplay, disabled (for current item: 0, on player: 1)

¿Alguien tiene una idea de por qué el jugador deja de trabajar?

Edición: Añadido un proyecto de ejemplo en github


Así que para mí esta solución funcionó:

if( !( player.playbackState == MPMoviePlaybackStatePlaying ) ) { player.shouldAutoplay = YES; [player prepareToPlay]; [player stop]; [player play]; }

añadiendo tanto "shouldAutoplay" como "stop"

Un saludo, Eliza


He resuelto este problema con un enfoque diferente. Dado que el motivo principal del problema es iOS 6, que llama a viewWillDisappear: y / o viewDidDisappear: métodos. Pensé que tal vez iOS también está llamando a los mismos métodos de MPMoviePlayerViewController. Así que he creado una categoría para MPMoviePlayerViewController e implementé los métodos viewWillDisappear: y / o viewDidDisappear :. Curiosamente funciona. (Por cierto esto no es recomendado por Apple)

Aquí están los códigos;

Encabezado (MPMoviePlayerViewController_FullscreenFix.h)

#import <MediaPlayer/MediaPlayer.h> @interface MPMoviePlayerViewController (MPMoviePlayerViewController_FullscreenFix) - (void)viewDidDisappear:(BOOL)animated; - (void)viewWillDisappear:(BOOL)animated; @end

Implementación (MPMoviePlayerViewController_FullscreenFix.m)

#import "MPMoviePlayerViewController_FullscreenFix.h" @implementation MPMoviePlayerViewController (MPMoviePlayerViewController_FullscreenFix) -(void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; } - (void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; } @end

Ahora mi código está trabajando en las versiones iOS 6.1.3, 5.5.1 y 4.3.5 con el mismo comportamiento.


La solución es crear una propiedad para conservar la clase MPMoviePlayerController

@property (nonatomic, retain) MPMoviePlayerController *moviePlayerController;

y usa la propiedad en tu controlador

self.moviePlayerController = [[MPMoviePlayerController alloc] init]; [_viewMediaPlayer addSubview:self.moviePlayerController.view];

hay un error en iOS6 y el MPMoviePlayerController se desasigna cuando se ingresa en modo de pantalla completa http://openradar.appspot.com/12327997


Lo resolví por mí mismo. Al agregar el Reproductor de películas como una subvista a una vista de contenedor, no necesito usar el controlador de vista real creado con el MPMoviePlayerViewController que está diseñado para presentarlo de manera modal o en otra jerarquía de vc.

Con el único propósito de tener una vista de Reproductor de películas que se puede agregar a otra vista como una subvista, la propiedad de vista de MPMoviePlayerController es suficiente.

Hasta que iOS 6 funcionó, pero iOS 6 parece diferir en términos de gestión de recursos / vida útil.

El proyecto de ejemplo se actualiza con código de trabajo.


Otra forma de lidiar con esto es usar la devolución de llamada de notificación a pantalla completa:

1) Agregue una notificación para el reproductor de películas MPMoviePlayerDidEnterFullscreenNotification. 2) Antes de reproducir la película, configure un valor booleano que indique que la película está entrando en pantalla completa. 3) Borre el valor booleano a NO en su devolución de llamada de pantalla completa, así como su llamada de película finalizada. 4) En su vista, WillDisappear, verifique si su booleano para ver si su película está entrando en pantalla completa, y maneje según sea necesario.

También cuando se presenta un MPMoviePlayerViewController, el uso de la función setFullScreen después de la presentación puede hacer que la película se detenga en iOS6.


Simplemente agregue shouldAutoplay boolean a YES después de generar la URL. Funcionó para mí.

Me gusta esto:

NSString *path = [[NSBundle mainBundle] pathForResource:videoFileName ofType:@"mp4" inDirectory:nil]; NSURL *movieURL = [NSURL fileURLWithPath:path]; MPMoviePlayerController *player = [[MPMoviePlayerController alloc] init]; player.contentURL = movieURL; player.controlStyle = MPMovieControlStyleNone; player.shouldAutoplay = YES; [player prepareToPlay]; player.fullscreen = YES; [player.view setFrame:[[[[UIApplication sharedApplication] delegate] window] frame]]; // player''s frame must match parent''s [[[[UIApplication sharedApplication] delegate] window] addSubview: player.view]; [player play];


Tuve algo similar en iOS 6.

¿Has intentado forzar al jugador a jugar después de pasar a pantalla completa? Al llamar de nuevo a [MPMoviePlayerController play] por ejemplo, esto resolvió en parte el problema que tenía.


Tuve el mismo problema, pero al cargar un video desde una url (en la web)

Anteriormente yo:

  1. Suscrito para MPMoviePlayerPlaybackDidFinishNotification notifications
  2. Inicializó un MPMoviePlayerViewController (no hay url de contenido en esta etapa)
  3. Presentado a través de presentMoviePlayerViewControllerAnimated :
  4. Mientras estaba en la pantalla, cargué la url transmitida (asincrónicamente)
  5. Cuando volviera a aparecer la url, establecería la url de contenido en la películaPlayer de MPMoviePlayerViewController ''

Como dijiste, de vez en cuando el MPMoviePlayerViewController se MPMoviePlayerViewController y no se descartaría solo cuando el usuario toca salir, para solucionar esto, cambié mi orden de reproducción automática, por lo que el flujo se convirtió en:

  1. Suscrito para MPMoviePlayerPlaybackDidFinishNotification notifications
  2. Inicializó un MPMoviePlayerViewController (no hay url de contenido en esta etapa)
  3. Establezca el reproductor de shouldAutoplay debe shouldAutoplay automáticamente el shouldAutoplay booleano en NO
  4. Presentado a través de presentMoviePlayerViewControllerAnimated :
  5. Mientras estaba en la pantalla, cargué la url transmitida (asincrónicamente)
  6. Cuando volviera a aparecer la url, establecería la url de contenido en la películaPlayer de MPMoviePlayerViewController ''
  7. Establezca el reproductor de shouldAutoplay debe shouldAutoplay automáticamente el shouldAutoplay booleano en SÍ.

Desde esos dos cambios, todavía tengo que ver que el controlador se atasque


Verifique la URL exacta después de configurar la URL de contenido del reproductor. Puede contener algunos caracteres ilegales.

NSLog(@"%@", player.contentURL);

El simulador elimina los espacios pero el dispositivo no. Eso es lo que me pasó.


Mi solución de TRABAJO:

Tuve el mismo problema, cuando intento reproducir el video, se detiene inmediatamente después de un segundo con los registros:

[MPCloudAssetDownloadController] Prioritization requested for media item ID: 0 [MPAVController] Autoplay: Skipping autoplay, disabled (for current item: 0, on player: 1)

Resolví poniendo el comando stop antes del comando play :

[playerController stop]; [playerController play];

Ahora funciona perfecto!