2012-04-26 7 views
6

¿Por qué se seleccionan los videos con UIImagePickerController? La configuración de calidad de video alta y media da como resultado exactamente los mismos atributos de video, al menos en dispositivos como el iPhone4 y el iPad3.¿Por qué los videos seleccionados mediante la configuración alta y media de UIImagePickerController pueden generar los mismos atributos de calidad en los resultados?

Detalles:

Estamos utilizando UIImagePickerController para que nuestros usuarios de aplicaciones recoger imágenes o vídeos desde la biblioteca de fotos y luego transferirlos a sus servidores. Permitimos que los usuarios seleccionen la calidad de video de alta, media o baja, que asignamos directamente a las constantes UIImagePickerControllerQualityTypeHigh, UIImagePickerControllerQualityTypeMedium y UIImagePickerControllerQualityTypeLow videoQuality.

Cuando se elije un segundo 10 o así de vídeo, un disparo fuera de nuestra aplicación con la cámara, y se envían en el 3GS (iOS 5.0) vemos una clara diferencia entre valor de calidad, por ejemplo:

  • bajo: 226KB en 144x192, codec: H.264 AAC
  • medio: 1,1 MB en 360x480, codec: H.264 AAC
  • alto: 5 MB en 480x640, codec: H.264 AAC

Cuando intentamos lo mismo en el iPhone4 o iPad3 (w Pasamos a tener esos dispositivos a mano; no estoy seguro de que suceda únicamente en los dispositivos) que estamos viendo que el ajuste de baja genera un resultado de baja resolución equivalente, pero el ajuste de alta y media nos dan los mismos resultados, algo como esto:

  • baja: 194KB en 144x192, codec: H.264 AAC
  • medio: 2.87MB en 720x1280, codec: H.264 AAC
  • alto: 2.87MB en 720x1280, codec: H.264 AAC

(Tenga en cuenta que la los resultados medianos y altos son idénticos.)

El original del dispositivo es de 12.8 MB a 720x1280, códec: AAC H.264 a una velocidad de bits más alta.

¿Puede explicar algo de lo que está pasando aquí? Me gustaría poder explicarlo a nuestros clientes, incluso mejor señalar algo en el documento de Apple que cubra esto.

Gracias de antemano por cualquier ayuda ...

Respuesta

5

El ajuste de calidad de vídeo sólo se aplica cuando los vídeos de captura y no las recogiendo el selector de vídeo. La configuración aparece claramente en la sección de configuración de captura a continuación.

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIImagePickerController_Class/UIImagePickerController/UIImagePickerController.html

Usted puede utilizar el código siguiente para exportar el vídeo en la forma original. Solo pase el valor URL del video seleccionado y la función devolverá la ruta del video exportado.

+(NSString*) videoAssetURLToTempFile:(NSURL*)url 
{ 
    NSString * surl = [url absoluteString]; 
    NSString * ext = [surl substringFromIndex:[surl rangeOfString:@"ext="].location + 4]; 
    NSTimeInterval ti = [[NSDate date]timeIntervalSinceReferenceDate]; 
    NSString * filename = [NSString stringWithFormat: @"%f.%@",ti,ext]; 
    NSString * tmpfile = [NSTemporaryDirectory() stringByAppendingPathComponent:filename]; 

    NSURL *outputURL = [NSURL fileURLWithPath:tmpfile]; 

    AVURLAsset *asset = [AVURLAsset URLAssetWithURL:url options:nil]; 
    AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetHighestQuality]; 
    exportSession.outputURL = outputURL; 
    exportSession.shouldOptimizeForNetworkUse = YES; 
    exportSession.outputFileType = AVFileTypeQuickTimeMovie; 
    [exportSession exportAsynchronouslyWithCompletionHandler:^(void) 
    { 
     NSLog(@"Export Complete %d %@ %@", exportSession.status, exportSession.error, outputURL); 
     [exportSession release]; 
    }]; 

    return tmpfile; 
} 
+1

La extensión se debe obtener con [[url lastPathComponent] pathExtension]; – LightMan

+3

La configuración de calidad de video aparece en la configuración de captura, pero la documentación dice: "También se usa cada vez que se selecciona una película grabada". –

Cuestiones relacionadas