2012-04-26 4 views
6

Dlaczego filmy są wybierane za pomocą UIImagePickerController wysokiej i średniej jakości ustawień wideo, co daje dokładnie takie same atrybuty wideo, przynajmniej na urządzeniach takich jak iPhone4 i iPad3?Dlaczego filmy wybrane za pomocą ustawień wyższych i średnich UIImagePickerController mogą powodować takie same atrybuty jakości dla wyników?

Szczegóły:

Używamy UIImagePickerController aby nasi użytkownicy aplikacji wybrać zdjęcia lub filmy z biblioteki zdjęć, a następnie przesłać je na swoich serwerach. Pozwalamy użytkownikom wybrać jakość wideo wysoką, średnią lub niską, którą mapujemy bezpośrednio do stałych UIImagePickerControllerQualityTypeHigh, UIImagePickerControllerQualityTypeMedium i UIImagePickerControllerQualityTypeLow videoQuality.

Gdy 10 sekund lub tak wideo, nakręcony poza naszej aplikacji z aparatem, jest odbierane i wysyłane na 3GS (iOS 5.0) widzimy wyraźną różnicę z każdego ustawienia jakości, na przykład:

  • niski: 226KB przy 144x192, kodek: H.264 AAC
  • medium: 1.1MB przy 360x480, kodek: H.264 AAC
  • wysoka: 5 MB przy 480x640, kodek: AAC H.264

Kiedy spróbujemy tego samego na iPhone4 lub iPad3 (w przypadkiem urządzenia te są przydatne; nie wiem, to dzieje się tylko do tych urządzeń) widzimy, że niskie ustawienie generuje równoważny wynik niskiej rozdzielczości, ale wysokie i średnie ustawienie daje nam takie same rezultaty, coś takiego:

  • niska: 194KB na 144x192, kodek: H.264 AAC
  • medium: 2.87MB w 720x1280, kodek: H.264 AAC
  • wysoka: 2.87MB w 720x1280, kodek: H.264 AAC

(Należy zauważyć, że średnie i wysokie wyniki są identyczne.)

Oryginał z urządzenia to 12,8 MB przy 720 x 1280, kodek: AAC H.264 przy wyższej przepływności.

Czy można wyjaśnić, co się tutaj dzieje? Chciałbym móc wyjaśnić to naszym klientom, jeszcze lepiej wskazać na coś w dokumencie Apple'a, który to omawia.

Dzięki z góry za wszelką pomoc ...

Odpowiedz

5

jakość obrazu ustawienie dotyczy tylko podczas przechwytywania wideo i nie zbierając je z próbnika wideo. Ustawienie jest wyraźnie wymienione poniżej w sekcji ustawień robienia zdjęć.

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

Możesz skorzystać z poniższego kodu, aby wyeksportować film w oryginalnej formie. Po prostu podaj wartość adresu URL wybranego wideo, a funkcja zwróci ścieżkę eksportowanego wideo.

+(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

Rozszerzenie należy uzyskiwać [[adres URL lastPathComponent] pathExtension]; – LightMan

+3

Ustawienie wideoQuality znajduje się na liście ustawień przechwytywania, ale dokumentacja mówi: "Jest również używana przy wybieraniu nagranego filmu." –

Powiązane problemy