2010-07-01 12 views
17

Sto utilizzando UIImagePickerController per consentire al mio utente di selezionare un video dalla libreria delle risorse.Evita la compressione video quando selezioni un film con UIImagePickerController?

Quando l'utente seleziona il pulsante "Scegli" nella seconda schermata, la vista visualizza una barra di avanzamento e un messaggio "Comprimi video ...".

Perché sta succedendo?

C'è un modo per evitare questa operazione di compressione?

+0

ancora non hanno trovato una soluzione a questo. Qualcuno ha qualche idea? – Avalanchis

+0

Dai un'occhiata alle mie risposte qui sotto.Non sembra che gli sviluppatori possano influenzare la compressione. – memmons

+1

Avalanchis - questa risposta è stata 2 anni fa. È possibile ottenere un accordo? – memmons

risposta

16

Risposta: Non v'è attualmente alcun modo per controllare come UIImagePickerController comprime il video scelto.

Ho appena fatto alcuni test rapidi. Usando un'app di prova che ho creato, ho scelto lo stesso video due volte: una volta con la proprietà videoQuality impostata su UIImagePickerControllerQualityTypeHigh e una volta impostata su UIImagePickerControllerQualityTypeLow. I file risultanti copiati sono esattamente della stessa dimensione, 15.1 MB con una dimensione del fotogramma di 360 x 480. L'originale era 72.5 MB con una dimensione del frame di 480x640. Apparentemente questa proprietà non influisce affatto sulla compressione utilizzata.

+0

Ci sono novità a riguardo? Apprezzeremmo davvero che gli utenti non dovessero aspettare la finestra di dialogo di "compressione" durante il prelievo del video da caricare. –

+0

Sono d'accordo. La soluzione migliore è presentare un radar con Apple. – memmons

+0

Ora è passato un anno e non è cambiato nulla - iOS 6 continua a non consentire l'importazione diretta dell'URL dei media :( – KPK

4

Impostare la videoQuality proprietà della UIImagePickerController a "High" (UIImagePickerControllerQualityTypeHigh = 0)

Dalla documentazione SDK: "Se la visualizzazione di un filmato registrato nel selettore immagine, specifica che non si vuoi ridurre la qualità del video del film. "

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

+0

Sembra che su iPhone 4 si comprimerà ancora anche se impostato su "Alto" ma la qualità è molto meglio di quella predefinita. Posso capire perché comprimono a "Alto" poiché il video 720p originale è codificato a più di 10 Mbit/sec! – CDeutsch

+0

Ho risultati simili, anche impostandolo su Risultati alti in alcuni tipi di compressione (e nella finestra di dialogo "Comprimi video"). – Shizam

+0

Nei documenti per 'UIImagePickerControllerQualityTypeHigh' l'ultima riga dice:" ** Se si visualizza un filmato registrato nel selettore di immagini, si specifica che non si desidera ridurre la qualità video del film. ** ". Ciò sembra indicare che per il prelievo di video (piuttosto che per la registrazione) questa proprietà influisce sul modo in cui vengono visualizzati nella schermata di modifica del selettore di immagini. – memmons

0

Per coloro che danno il consiglio di utilizzare la proprietà videoQuality, la documentazione indica chiaramente che si tratta di un'opzione di acquisizione video, non un'opzione di selezione.

Come Jack lo menziona di seguito, è anche per la transcodifica. Sembra che abbia letto il documento troppo velocemente perché non ho notato la menzione della transcodifica.

+1

La documentazione dice "La registrazione video ** e la qualità di transcodifica **." –

3

Dato che non è ancora possibile evitare la compressione con UIImagePickerController, ho voluto includere alcune idee su come è possibile creare il proprio raccoglitore di immagini che eviterà la compressione.

Ciò consentirà l'accesso ai file video grezzi:

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 
    }]; 
} 

consultare la documentazione per l'accesso PhotoKit collezioni (momenti) e altre opzioni.

Ecco un'applicazione di esempio da Apple utilizzando PhotoKit che potrebbe essere modificato per essere una foto raccoglitrice: https://developer.apple.com/library/ios/samplecode/UsingPhotosFramework/Introduction/Intro.html

Ecco una libreria fotografica selettore su GitHub che utilizza PhotoKit che sembra essere molto promettente in quanto ti dà gli oggetti PHAsset per tutti i selezionati immagini/video: https://github.com/guillermomuntaner/GMImagePicker

iOS 7 e sotto

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); 
}];