videos peliculas pasar para formatos formato cual con compatibles como iphone ios mpmovieplayercontroller avplayer

peliculas - formatos de video compatibles con iphone 6



¿Cómo reproducir archivos de película sin extensión de archivo en iOS con MPMoviePlayerController o AVPlayer? (7)

Quiero reproducir una película en iOS 4.3 en el iPad. He utilizado con éxito MPMoviePlayerController y AVPlayer para cargar archivos desde una URL remota cuando el nombre del archivo tiene una extensión de archivo. Sin embargo, cuando uso un CDN que no devuelve el nombre de archivo (solo un nombre aleatorio que no se puede adivinar), ni MPMoviePlayerController ni AVPlayer parecen ser capaces de hacer frente.

¿Hay alguna manera de decirle a cualquiera de los jugadores que realmente es una película de tipo x y que debería seguir jugando?

MPMoviePlayerController devolverá el siguiente error a partir de la notificación de cambio de estado:

{ MPMoviePlayerPlaybackDidFinishReasonUserInfoKey = 1; error = "Error Domain=MediaPlayerErrorDomain Code=-12847 /"This movie format is not supported./" UserInfo=0x5b60030 {NSLocalizedDescription=This movie format is not supported.}"; }

Sé que ese archivo es un archivo m4v válido, ya que cuando renombro todo está bien.


Archivo en tmp

NSString* _filePath

Crear enlace simbólico

NSFileManager *filemgr = [NSFileManager defaultManager]; NSString *slink = [_filePath stringByAppendingPathExtension:@"m4v"]; if (![filemgr fileExistsAtPath:slink]) { NSError *error = nil; [filemgr createSymbolicLinkAtPath:[_filePath stringByAppendingPathExtension:@"m4v"] withDestinationPath: _filePath error: &error]; if (error) { ... } } ...

reproducir video por slink


Dylan tiene razón.

Tanto MPMoviePlayer como AVPlayer necesitan una extensión de archivo para reproducir el archivo desde la URL, de lo contrario se mostrará un mensaje de error. Mejor usar algún tipo de trucos.


El iPhone admite video H.264, MPEG-4 en formato .mp4, .m4v, .mov y archivos de audio en AAC, MP3, M4a, Apple sin pérdida y audible. Puede usar el método -contentsOfDirectoryAtPath de NSFileManager: error: método para obtener una matriz con el contenido de un directorio (como cadenas). Luego, simplemente realice operaciones de cadenas.


Es una especie de pirateo, pero lo que podría hacer es ejecutar cada nombre a través de un método que compruebe un período con tres caracteres después. Si no, simplemente agregue .m4v automáticamente. O obtenga el tipo MIME y agregue una extensión automáticamente en función del tipo devuelto. Si está disponible. Consulte la documentación con NSString para obtener más información. ¡Buena suerte! Déjame saber si eso ayudó.


Si el jugador no puede adivinar el formato de archivo, debe verificar que el CDN envíe el tipo de mimo correcto. Mi conjetura es que su CDN no puede adivinar correctamente el tipo MIME ni el jugador.

En la mayoría de los casos, esto se debe a cómo el CDN presenta el encabezado HTTP. Compruebe que el encabezado "Tipo de contenido" esté configurado en un formato de video que coincida con su contenido.


Si tiene problemas para obtener el ContentType de su conexión, puede alternar entre los tipos MIME reproducibles y crear enlaces simbólicos al archivo real con la extensión y verificar si se pueden reproducir. Al igual que:

NSLog(@"linked path: %@",[videoURL absoluteString]); NSString* linkedPath; AVURLAsset* asset; NSFileManager *filemgr = [NSFileManager defaultManager]; for (NSString* string in [AVURLAsset audiovisualMIMETypes]) { if ([string containsString:@"video/"]) { NSLog(@"Trying: %@",string); linkedPath = [[videoURL absoluteString] stringByAppendingPathExtension:[string stringByReplacingOccurrencesOfString:@"video/" withString:@""]]; NSLog(@"linked path: %@",linkedPath); if (![filemgr fileExistsAtPath:linkedPath]) { NSError *error = nil; [filemgr createSymbolicLinkAtURL:[NSURL URLWithString:linkedPath] withDestinationURL:videoURL error:&error]; if (error) { NSLog(@"error %@",error.localizedDescription); } } asset = [AVURLAsset assetWithURL:[NSURL URLWithString:linkedPath]]; if ([asset isPlayable]) { NSLog(@"Playable"); break; }else{ NSLog(@"Not Playable"); asset = nil; } } }


WebKit maneja esto mediante una opción privada AVURLAsset: AVURLAssetOutOfBandMIMETypeKey , esta opción se usa cuando especifica un tipo MIME en la etiqueta de video del HTML,

Puedes usar esta opción como:

NSString * mimeType = @"video/mp4"; // or even with codecs mimeType = @"video/mp4; codecs=/"avc1.42E01E, mp4a.40.2/""; // create asset AVURLAsset * asset = [[AVURLAsset alloc] initWithURL:url options:@{@"AVURLAssetOutOfBandMIMETypeKey": mimeType}]; // create AVPlayer with AVURLAsset AVPlayer * player = [AVPlayer playerWithPlayerItem:[AVPlayerItem playerItemWithAsset:asset]];

Dado que es una clave privada, es posible que desee ofuscarla si planea enviarla a AppStore.

La fuente de WebKit se puede encontrar aquí: https://opensource.apple.com/source/WebCore/WebCore-7604.1.38.1.6/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm.auto.html