2010-07-01 9 views
17

Ich verwende UIImagePickerController, damit mein Benutzer ein Video aus der Objektbibliothek auswählen kann.Vermeiden Sie Videokompression bei der Auswahl von Film mit UIImagePickerController?

Wenn der Benutzer auf dem zweiten Bildschirm die Schaltfläche "Auswählen" auswählt, zeigt die Ansicht einen Fortschrittsbalken und eine Meldung "Video komprimieren ..." an.

Warum passiert das?

Gibt es eine Möglichkeit, diese Komprimierung zu vermeiden?

+0

haben noch keine Lösung für dieses gefunden. Hat jemand Ideen? – Avalanchis

+0

Werfen Sie einen Blick auf meine Antworten unten.Es sieht nicht so aus, als könnten Entwickler die Komprimierung beeinflussen. – memmons

+1

Avalanchis - dies wurde vor 2 Jahren beantwortet. Möglich, ein Akzeptieren zu bekommen? – memmons

Antwort

16

Antwort: Es gibt derzeit keine Möglichkeit, zu kontrollieren, wie UIImagePickerController das aufgenommene Video komprimiert.

Ich habe gerade ein paar schnelle Tests gemacht. Unter Verwendung einer Test-App, die ich erstellt habe, wählte ich das gleiche Video zwei Mal - einmal mit der videoQuality Eigenschaft auf UIImagePickerControllerQualityTypeHigh und einmal damit auf UIImagePickerControllerQualityTypeLow festgelegt. Die resultierenden Dateien, die kopiert wurden, haben genau die gleiche Größe, 15,1 MB bei einer Bildgröße von 360x480. Das Original war 72,5 MB mit einer Frame-Größe von 480 x 640. Anscheinend beeinflusst diese Eigenschaft die verwendete Komprimierung überhaupt nicht.

+0

Gibt es Neuigkeiten dazu? Würde es wirklich schätzen, dass die Benutzer nicht auf den "Komprimieren" -Dialog warten mussten, wenn sie das Video zum Hochladen auswählten. –

+0

Ich stimme zu. Ihre beste Wette ist, ein Radar mit Apple zu archivieren. – memmons

+0

Nun ist es ein Jahr später und nichts hat sich geändert - iOS 6 erlaubt immer noch nicht das Importieren der Medien-URL direkt :( – KPK

4

Stellen Sie die Videoqualität Eigenschaft des UIImagePickerController auf "High" (UIImagePickerControllerQualityTypeHigh = 0)

Aus der SDK-Dokumentation: „Wenn einen aufgezeichneten Film im Bild-Picker angezeigt wird, gibt an, dass Sie dies nicht tun möchte die Videoqualität des Films reduzieren. "

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

+0

Sieht aus wie auf dem iPhone 4 wird es immer noch komprimieren, auch wenn es auf "Hoch" eingestellt ist, aber die Qualität ist viel besser als die Standardeinstellung. Ich kann sehen, warum sie bei "High" komprimieren würden, da das ursprüngliche 720p-Video bei mehr als 10 Mbit/s kodiert ist! – CDeutsch

+0

Ich habe ähnliche Befunde und setze es sogar auf High-Ergebnisse bei etwas Komprimierung (und dem Dialog 'Komprimieren von Videos'). – Shizam

+0

In der Dokumentation für 'UIImagePickerControllerQualityTypeHigh' steht in der letzten Zeile:" ** Wenn ein aufgezeichneter Film in der Bildauswahl angezeigt wird, wird festgelegt, dass die Videoqualität des Films nicht reduziert werden soll. ** ". Dies scheint darauf hinzuweisen, dass diese Eigenschaft für die Auswahl von Videos (anstatt der Aufnahme) Einfluss darauf hat, wie sie auf dem Bearbeitungsbildschirm des Bildwählers angezeigt werden. – memmons

0

Wenn Sie die videoQuality-Eigenschaft verwenden, wird in der Dokumentation eindeutig darauf hingewiesen, dass es sich um eine Videoaufzeichnungsoption und nicht um eine Auswahloption handelt.

Wie Jack es unten erwähnt, ist es auch für die Umcodierung. Sieht so aus, als hätte ich das Dokument zu schnell gelesen, weil ich die Transkodierung nicht bemerkt habe.

+1

Die Dokumentation sagt "Die Videoaufnahme ** und Transcodierungsqualität **." –

3

Da es noch keine Möglichkeit gibt, die Komprimierung mit UIImagePickerController zu vermeiden, wollte ich einige Ideen einbringen, wie Sie Ihren eigenen Bilderwähler erstellen können, der eine Komprimierung vermeidet.

Dadurch wird der Zugriff auf die rohen Videodateien ermöglichen:

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

Blick auf die PhotoKit Dokumentation für Sammlungen (Momente) und andere Optionen zugreifen.

Hier ist eine Beispielanwendung von Apple PhotoKit verwenden, die modifiziert werden könnte, ein Foto-Picker zu sein: https://developer.apple.com/library/ios/samplecode/UsingPhotosFramework/Introduction/Intro.html

Hier ein Foto-Picker-Bibliothek auf GitHub ist die PhotoKit verwendet, die vielversprechend aussieht, da es Ihnen die PHAsset Objekte gibt für alle ausgewählten Bilder/Videos: https://github.com/guillermomuntaner/GMImagePicker

iOS 7 und unter

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