2010-07-01 10 views
17

Estoy usando UIImagePickerController para permitir que mi usuario seleccione un video de la biblioteca de activos.Evite la compresión de video al seleccionar la película con UIImagePickerController?

Cuando el usuario selecciona el botón "Elegir" en la segunda pantalla, la vista muestra una barra de progreso y un mensaje de "Compresión de video ...".

¿Por qué sucede esto?

¿Hay alguna manera de evitar esta operación de compresión?

+0

Aún no han encontrado una solución a esto. ¿Alguien tiene alguna idea? – Avalanchis

+0

Eche un vistazo a mis respuestas a continuación.No parece que los desarrolladores puedan afectar la compresión. – memmons

+1

Avalanchis - esto fue respondido hace 2 años. Posible obtener un aceptar? – memmons

Respuesta

16

Respuesta: Actualmente no existe una manera de controlar la forma en UIImagePickerController comprime el vídeo recogido.

Acabo de hacer algunas pruebas rápidas. Utilizando una aplicación de prueba que creé, seleccioné el mismo video dos veces: una con la propiedad videoQuality establecida en UIImagePickerControllerQualityTypeHigh y otra vez con UIImagePickerControllerQualityTypeLow. Los archivos resultantes que se copiaron son exactamente del mismo tamaño, 15.1MB con un tamaño de fotograma de 360x480. El original era 72.5MB con un tamaño de marco de 480x640. Aparentemente esta propiedad no afecta la compresión utilizada en absoluto.

+0

¿Hay alguna noticia sobre esto? Realmente agradecería que los usuarios no tuvieran que esperar el cuadro de diálogo de "compresión" al seleccionar el video que se cargará. –

+0

Estoy de acuerdo. Su mejor apuesta es archivar un radar con Apple. – memmons

+0

Bueno, es un año más tarde y nada ha cambiado: iOS 6 todavía no permite importar la URL de los medios directamente :( – KPK

4

Ajuste el calidad de video propiedad del UIImagePickerController en "Alto" (UIImagePickerControllerQualityTypeHigh = 0)

De la documentación del SDK: "Si se visualiza una película grabada en el selector de imágenes, se especifica que no lo hace quiere reducir la calidad de video de la película ".

http://developer.apple.com/iphone/library/documentation/uikit/reference/UIImagePickerController_Class/UIImagePickerController/UIImagePickerController.html#//apple_ref/doc/c_ref/UIImagePickerControllerQualityType

+0

Parece que en el iPhone 4 todavía se comprime, incluso cuando se establece en "Alto", pero la calidad es mucho mejor que la predeterminada. Puedo ver por qué se comprimirían en "Alta" ya que el video original de 720p está codificado a más de 10 Mbit/seg. – CDeutsch

+0

Tengo hallazgos similares, incluso estableciéndolo en Resultados altos en alguna compresión (y en el cuadro de diálogo 'Comprimir video'). – Shizam

+0

En los documentos para 'UIImagePickerControllerQualityTypeHigh', la última línea dice:" ** Si visualiza una película grabada en el selector de imágenes, especifica que no desea reducir la calidad de video de la película. ** ". Esto parece indicar que para seleccionar videos (en lugar de grabar) esta propiedad afecta la forma en que se muestran en la pantalla de edición del selector de imágenes. – memmons

0

Para aquellos que aconsejan usar la propiedad videoQuality, la documentación indica claramente que se trata de una opción de captura de video, no de un selector.

Como Jack lo menciona a continuación, también es para la transcodificación. Parece que leo el documento demasiado rápido porque no noté la mención de transcodificación.

+1

La documentación dice "La grabación de video ** y la calidad de transcodificación **". –

3

Como todavía no hay manera de evitar la compresión con UIImagePickerController, quería incluir algunas ideas de cómo puede crear su propio selector de imágenes que evitará la compresión.

Esto permitirá el acceso a los archivos de vídeo primas:

iOS 8

PHFetchResult *assetsFetchResult = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeVideo options:nil]; 
for (PHAsset *asset in assetsFetchResult) { 
    PHVideoRequestOptions *videoRequestOptions = [[PHVideoRequestOptions alloc] init]; 
    videoRequestOptions.version = PHVideoRequestOptionsVersionOriginal; 

    [[PHImageManager defaultManager] requestAVAssetForVideo:asset options:videoRequestOptions resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) { 
     // the AVAsset object represents the original video file 
    }]; 
} 

vistazo a la documentación PhotoKit para acceder a colecciones (momentos) y otras opciones.

Aquí es una aplicación de ejemplo de Apple utilizando PhotoKit que podría ser modificado para que sea una foto selector: https://developer.apple.com/library/ios/samplecode/UsingPhotosFramework/Introduction/Intro.html

Aquí es una biblioteca de fotos selector en GitHub que utiliza PhotoKit que parece prometedor, ya que le da a los objetos PHAsset para todas las imágenes/vídeos seleccionados: https://github.com/guillermomuntaner/GMImagePicker

iOS 7 y por debajo

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; 

[library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) { 
    if (group) { 
     // If you want, you can filter just pictures or videos 
     // I just need videos so I do this: 
     [group setAssetsFilter:[ALAssetsFilter allVideos]]; 

     [group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop){ 
      if (asset){ 
       // You can now add this ALAsset in your own video picker. 
       // Note that you can only access the ALAsset as long as 
       // you maintain a reference to the ALAssetsLibrary 

       // Or if you want to process the video, you can create an AVAsset: 
       NSURL *url = asset.defaultRepresentation.url; 
       AVAsset *videoAsset = [AVAsset assetWithURL:url]; 
      } 
     }]; 
    } 
} failureBlock:^(NSError *error) { 
    NSLog(@"error enumerating AssetLibrary groups %@\n", error); 
}]; 
Cuestiones relacionadas