Почему видео, выбранные с помощью высоких и средних настроек UIImagePickerController, могут давать одинаковые атрибуты качества в результатах?

Почему видео выбирается с настройками высокого и среднего качества видео UIImagePickerController, что приводит к одинаковым атрибутам видео, по крайней мере, на таких устройствах, как iPhone4 и iPad3?

Подробности:

Мы используем UIImagePickerController, чтобы пользователи нашего приложения могли выбирать изображения или видео из библиотеки фотографий, а затем передавать их на свои серверы. Мы позволяем пользователям выбирать качество видео высокого, среднего или низкого качества, которое мы сопоставляем непосредственно с константами UIImagePickerControllerQualityTypeHigh, UIImagePickerControllerQualityTypeMedium и UIImagePickerControllerQualityTypeLow videoQuality.

Когда 10-секундное или около того видео, снятое за пределами нашего приложения с помощью камеры, выбирается и отправляется в 3GS (iOS 5.0), мы видим четкую разницу с каждым параметром качества, например:

  • низкий: 226 КБ при 144х192, кодек: AAC H.264
  • средний: 1,1 МБ при 360x480, кодек: AAC H.264
  • высокая: 5 МБ при 480x640, кодек: AAC H.264

Когда мы пытаемся сделать то же самое на iPhone4 или iPad3 (у нас есть эти устройства под рукой; мы не уверены, что это происходит только на этих устройствах), мы видим, что низкое значение генерирует эквивалентный результат низкого разрешения, но высокое и среднее значение дают у нас такие же результаты, как то так:

  • низкий: 194 КБ при 144х192, кодек: AAC H.264
  • средний: 2,87 МБ в разрешении 720x1280, кодек: AAC H.264
  • высокая: 2,87 МБ при 720x1280, кодек: AAC H.264

(Обратите внимание, что средние и высокие результаты идентичны.)

Оригинал с устройства составляет 12,8 МБ с разрешением 720х1280, кодек: AAC H.264 с более высокой скоростью передачи данных.

Кто-нибудь может объяснить, что здесь происходит? Я хотел бы иметь возможность объяснить это нашим клиентам, еще лучше указать на что-то в документации Apple, которая охватывает это.

Заранее благодарю за любую помощь...

1 ответ

Решение

Параметр качества видео применяется только при захвате видео, а не при выборе его из средства выбора видео. Настройка четко указана в разделе настроек захвата ниже.

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

Вы можете использовать код ниже, чтобы экспортировать видео в оригинальной форме. Просто передайте значение URL выбранного видео, и функция вернет путь к экспортированному видео.

+(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;
}
Другие вопросы по тегам