2011-02-17 17 views
11

Hola a todos, me gustaría saber si es posible reproducir un video desde un objeto NSData ... con el MPMoviePlayerController.Cómo reproducir video desde NSData

Gracias de antemano, Sergio

+0

¿De dónde obtiene los datos de? – zoul

+0

desde mi db ... no desde el paquete ... –

Respuesta

14

obras respuesta de Ben perfectamente en el simulador pero no funciona en el dispositivo. No puede escribir en ningún lugar del dispositivo. Compruebe el código de abajo

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

    [videoData writeToFile:path atomically:YES]; 
    NSURL *moveUrl = [NSURL fileURLWithPath:path]; 
    player = [[MPMoviePlayerController alloc]init]; 
    [player setContentURL:moveUrl]; 
    player.view.frame = viewPlayer.bounds; 
    [viewPlayer addSubview:player.view]; 
    [player play]; 
+1

ops! no puedo creer que yo sólo respondí otro de un año vieja pregunta ... :) – andsien

+5

Me pregunto si hay alguna manera de hacer esto sin escribir en un archivo? – Hope4You

+0

[[NSFileManager defaultManager] createFileAtPath: contenido de videoPath: atributos de videoData: nil]; – Zeeshan

0

Por lo que yo sé que esto no es posible. Si los datos provienen de su base de datos, ¿puede guardarlos en un archivo temporal y reproducirlos?

+0

sí, pero me gustaría evitar esto ...;) Estoy tratando de hacer esto con el marco QTKit ahora ... –

+0

pero no funciona .. . uff :( –

+0

2595063 stackoverflow –

-4
  1. crear un archivo con el tipo de su NSData por ejemplo, si su NSData es el tipo de mp4 crear un archivo con ese tipo - por ejemplo - "myMove.mp4"

  2. copiar el archivo al pasado su aplicación resurces

  3. añadir este código

    NSData *mediaData; //your data  
    NSString *movePath=[[NSBundle mainBundle] pathForResource:@"myMove" ofType:@"mp4"];   
    [mediaData writeToFile:movePath atomically:YES];   
    NSURL *moveUrl= [NSURL fileURLWithPath:movePath];  
    MPMoviePlayerController *movePlayer=[[MPMoviePlayerController alloc]init];   
    [movePlayer setContentURL:moveUrl]; 
    [movePlayer play]; 
    
+0

esto no funcionará en el dispositivo, que no puede escribir archivos en cualquier lugar en el dispositivo. Mira mi respuesta abajo .. – andsien

+1

-1 para hacer proselitismo –

0

Es mejor utilizar NSFileManager en este caso en lugar WriteToFile

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

[[NSFileManager defaultManager] createFileAtPath:path contents:videoData attributes:nil]; 

NSURL *moveUrl = [NSURL fileURLWithPath:path]; 
player = [[MPMoviePlayerController alloc]init]; 
[player setContentURL:moveUrl]; 
player.view.frame = viewPlayer.bounds; 
[viewPlayer addSubview:player.view]; 
[player play]; 
+2

¿Cuáles son las ventajas de usar createFileAtPath vs writeToFile? – user523234

Cuestiones relacionadas