7

Estoy usando el siguiente código para reproducir el video usando el MPMoviePlayerController, pero el video no se reproduce. Puede alguien decirme por que ?¿Cómo reproducir video usando MPMoviePlayerController?

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"/one.mp4"]; 

NSString *mediaPath = [[[NSBundle mainBundle]resourcePath] stringByAppendingPathComponent:filePath]; 

    MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:mediaPath]]; 

    [[moviePlayer view] setFrame:[[self view] bounds]]; 
    [[self view] addSubview: [moviePlayer view]]; 


    moviePlayer.scalingMode = MPMovieScalingModeAspectFit; 

    [moviePlayer play]; 
+0

¿Ha especificado la extensión del archivo? –

Respuesta

20

Es bastante extraño, pero parece funcionar bien si convierte su MPMoviePlayerController en una propiedad en lugar de una variable local. Parece que algo está sucediendo detrás de escena. Estoy pensando que está relacionado con ARC. ¿Estás usando ARC?

Es también un problema que ha sobre-añadida automáticamente a su trayectoria:

// You've already got the full path to the documents directory here. 
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"/one.mp4"]; 
// Now you're appending the full path to the documents directory to your bundle path 
NSString *mediaPath = [[[NSBundle mainBundle]resourcePath] stringByAppendingPathComponent:filePath]; 

Cuando ejecuto el código en el simulador, el camino se ve así:

/Usuarios/mlong/Biblioteca/Application Support/iPhone Simulator/5.1/Applications/8CFB9B94-BD6A-442C-A525-573FE343506D/VidoePlayer.app/Users/mlong/Library/Application Support/iPhone Simulator/5.1/Applications/8CFB9B94-BD6A-442C -A525-573FE343506D/Documents/one.mp4

Debe ser simplemente esto:

/Usuarios/mlong/Library/Application Support/iPhone/ Simulator 5.1/Aplicaciones/8CFB9B94-BD6A-442c-A525-573FE343506D/Documentos/one.mp4

Así que borrar esta línea:

NSString *mediaPath = [[[NSBundle mainBundle]resourcePath] stringByAppendingPathComponent:filePath]; 

Y a continuación, cambiar su reproductor de instancias a esto:

_moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:filePath]]; 

[[_moviePlayer view] setFrame:[[self view] bounds]]; 
[[self view] addSubview: [_moviePlayer view]]; 

_moviePlayer.scalingMode = MPMovieScalingModeAspectFit; 

[_moviePlayer play]; 

Por lo tanto, debe agregar MPMoviePlayerController como una propiedad del controlador de vista que lo contiene.

+0

Parece ser que tienes una descripción clara. He resuelto este problema hace mucho tiempo. El problema es establecer el marco y agregar preparado para reproducir y pantalla completa como SÍ. – Perseus

+0

@Perseus ¿Cómo exactamente resolviste esto? –

+0

Hola @Ancientar. Puede ver en el comentario anterior que ya lo mencioné, olvidé establecer el marco para MPMoviePlayerController y también agregué una propiedad prepareToPlay. Funcionó – Perseus

0

trata de preguntarle a su paquete directamente y no a la creación de la ruta del archivo manualmente

NSString *path = [[NSBundle mainBundle] pathForResource:@"name" ofType:@"mov"]; 
-1
MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:mediaPath]]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinishedCallback:) name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer]; 

esperanza de ayuda que

3

bien, hay una gran diferencia entre el paquete de aplicación y el directorio de documentos. Sugiero que eches un vistazo a eso.

En primer lugar, ¿Dónde se almacena el video?

Si su video está en el directorio de documentos, no anexe la ruta del directorio de documentos a la ruta del paquete.

Sólo trate con la variable filePath:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"/one.mp4"]; 

MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL filePath]]; 

Sin embargo, si el archivo está en el paquete de aplicación (lo agregó a su proyecto en Xcode), se debe utilizar lo que está en jinx respuesta.

+0

Lo intenté con FilePath también, la pantalla se volvió negra pero el video no se está reproduciendo. – Perseus

+0

FYI, no voy a agregar los archivos a mi proyecto, solo quiero obtenerlo del directorio Documentos – Perseus

+0

Cualquier ejemplo muy simple de que reproducir un video usando el MPMoviePlayerController será suficiente. Estaré muy agradecido por ti si me ayudas a resolver este problema. – Perseus

1
moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:url]; 
     [moviePlayer.view setFrame:CGRectMake(//set rect frame)]; 
     moviePlayer.controlStyle = MPMovieControlStyleDefault; 
     moviePlayer.shouldAutoplay=YES; 
     moviePlayer.repeatMode = NO; 
     [moviePlayer setFullscreen:YES animated:NO]; 
     [moviePlayer prepareToPlay]; 
[self.view addsubview:movieplayer.view]; 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(MPMoviePlayerLoadStateDidChange:) name:MPMoviePlayerLoadStateDidChangeNotification object:nil]; 


- (void)MPMoviePlayerLoadStateDidChange:(NSNotification *)notification { 

    if ((moviePlayer.loadState & MPMovieLoadStatePlaythroughOK) == MPMovieLoadStatePlaythroughOK) { 
//add your code 


    } 
} 
-1

Tardé unos minutos en resolver el problema pero la respuesta es bastante simple.Este es el trato:

  • Si desea MPMoviePlayerViewController para jugar desde una dirección URL Web utilizar este: NSURL * url = [NSURL URLWithString: @ "https://www.test.com/anyMovie.mp4"];

  • Y si quieres MPMoviePlayerViewController para reproducirlo desde App Bundle utilizar este: NSString * moviePath = [[NSBundle mainBundle] pathForResource: @ "anyMovie" OfType: @ "M4V"]; NSURL * url = [NSURL fileURLWithPath: moviePath];

el resto de ella pasa lo mismo, excepto que tiene que establecer esta propiedad "movieSourceType" de la siguiente manera:

MPMoviePlayerViewController *moviePlayerView = [[MPMoviePlayerViewController alloc] initWithContentURL:url]; 
moviePlayerView.moviePlayer.movieSourceType = MPMovieSourceTypeFile; 
[self presentViewController:moviePlayerView animated:YES completion:^{}]; 
0

jugador se inicia con la URL del video que se quiere reproducir (Puede ser una ruta de archivo local de un dispositivo o una URL activa) después de agregar ese reproductor como una vista secundaria de la vista actual.

formatos de vídeo soportados por clase MPMoviePlayerController están siguiendo

  1. .mov .mpv .3gp .mp4

No estoy seguro de lo mucho que este artículo le ayudará a cabo. Soy nuevo en esto. Trabajé en las instrucciones paso a paso provistas en this article

Cuestiones relacionadas