2012-08-23 18 views
8

Creé un proyecto nuevo con el siguiente ViewController.m. Cuando ejecuto la aplicación, puedo ver un cuadro del origen/tamaño esperado (38, 100, 250, 163) pero es negro y no se reproduce video. Hay una extraña salida en Xcode:No se puede reproducir video con MPMoviePlayerViewController

2012-08-23 15:36:45.559 VideoTest1[11398:c07] [MPAVController] Autoplay: Disabling autoplay for pause 
2012-08-23 15:36:45.560 VideoTest1[11398:c07] [MPAVController] Autoplay: Disabling autoplay 
2012-08-23 15:37:18.186 VideoTest1[11398:c07] [MPAVController] Autoplay: Skipping autoplay, disabled (for current item: 1, on player: 0) 

Tenga en cuenta que el video se convierte con Videora iPhone Converter y juega bien en Xcode (lo que no es un problema de vídeo); el camino al video está bien porque cuando especifico demo-iPhone1 (que no existe) obtengo una excepción nula. Intenté en Simulator y en iPhone: siempre caja negra. ¿Algunas ideas?

#import "ViewController.h" 
#import <MediaPlayer/MediaPlayer.h> 

@interface ViewController() 

@end 

@implementation ViewController 
- (void)moviePlaybackComplete:(NSNotification *)notification 
{ 
    MPMoviePlayerController *moviePlayerController = [notification object]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self 
                name:MPMoviePlayerPlaybackDidFinishNotification 
                object:moviePlayerController]; 

    [moviePlayerController.view removeFromSuperview]; 
} 


- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    NSString *filepath = [[NSBundle mainBundle] pathForResource:@"demo-iPhone" ofType:@"mp4"]; 
    NSURL *fileURL = [NSURL fileURLWithPath:filepath]; 
    MPMoviePlayerController *moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:fileURL]; 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(moviePlaybackComplete:) 
               name:MPMoviePlayerPlaybackDidFinishNotification 
               object:moviePlayerController]; 
    [moviePlayerController.view setFrame:CGRectMake(38, 
                100, 
                250, 
                163)]; 
    [self.view addSubview:moviePlayerController.view]; 
    [moviePlayerController play]; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 
} 

@end 
+0

Ha intentado con cualquier otro video. Tal vez un mp4 descargado de vimeo? –

+0

Steve, el video está realmente bien porque se reproduce en mi otra aplicación con exactamente el mismo código. Pero aún no puedo entender la diferencia. Por cierto, agregué la salida de Xcode. Tal vez te dará una idea de cuál es el problema. – maxgrinev

Respuesta

3

que resolver un problema similar añadiendo playercontroller.moviePlayer.movieSourceType = MPMovieSourceTypeFile;

+0

+1: esto me ayudó ... gracias una tonelada ... –

2

¿Utiliza ARC? Si es así, debes retener el MPMoviePlayerController.

Agregar a su interfaz de

@property (nonatomic, strong) MPMoviePlayerController *controller; 

Comprobar última línea de viewDidLoad

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    NSString *filepath = [[NSBundle mainBundle] pathForResource:@"demo-iPhone" ofType:@"mp4"]; 
    NSURL *fileURL = [NSURL fileURLWithPath:filepath]; 
    MPMoviePlayerController *moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:fileURL]; 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(moviePlaybackComplete:) 
              name:MPMoviePlayerPlaybackDidFinishNotification 
              object:moviePlayerController]; 
    [moviePlayerController.view setFrame:CGRectMake(38, 
               100, 
               250, 
               163)]; 
    [self.view addSubview:moviePlayerController.view]; 
    [moviePlayerController play]; 
    [self setController:moviePlayerController]; 
} 
+0

+1 para retener. Demasiados tutoriales muestran el uso de variables temporales. – DanneManne

13

Acabo de resolver un problema similar con esta línea de código. Los controladores del reproductor ahora se muestran y el video se reproduce perfectamente:

@property (nonatomic, strong) MPMoviePlayerController *moviePlayer; 
// 
@synthesize moviePlayer = _moviePlayer; 
// 
[self.moviePlayer prepareToPlay]; 

Modifique para adaptarse a su entorno.

+2

Llamar "prepareToPlay" en iPad/iOS6 solucionó esto por mí. Sin él, no se enviaba "MPMoviePlayerLoadStateDidChangeNotification" porque el jugador no se molestó en precargar el video. – diachedelic

+1

Me lo arreglaron también, antes de tener pantallas negras en iOS6 (mientras funcionaba bien en iOS5 y abajo). – Dado

+0

esto solucionó mi problema también, sin embargo, al cargar otro video desde una vista dividida en 5 segundos, aún puedo escuchar el audio del video anterior hasta que se hayan cumplido esos 5 segundos ... ¿Alguien tiene este problema? Estoy pensando en agregar el marco AVFoundation solo para poder probar y controlar las sesiones de audio. – whyoz

-2

Consulte también el formato de video. Seguí recibiendo este error con mi video de muestra .m4v (que descargué del sitio web de Apple). Eventualmente probé con un video diferente que era .mp4 y funcionó bien. Muchos de los errores aún aparecieron en mi consola.

2013-01-22 15:44:04.850 VideoTesting[4497:c07] [MPAVController] Autoplay: Likely to keep up or full buffer: 0 
2013-01-22 15:44:04.851 VideoTesting[4497:c07] [MPAVController] Autoplay: Skipping autoplay, not enough buffered to keep up. 
2013-01-22 15:44:04.853 VideoTesting[4497:c07] [MPAVController] Autoplay: Disabling autoplay for pause 
2013-01-22 15:44:04.853 VideoTesting[4497:c07] [MPAVController] Autoplay: Disabling autoplay 
2013-01-22 15:44:04.861 VideoTesting[4497:c07] [MPAVController] Autoplay: Enabling autoplay 

Sin embargo, el video se reprodujo.

Cuestiones relacionadas