Почему видео, выбранные с помощью высоких и средних настроек 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 ответ
Параметр качества видео применяется только при захвате видео, а не при выборе его из средства выбора видео. Настройка четко указана в разделе настроек захвата ниже.
Вы можете использовать код ниже, чтобы экспортировать видео в оригинальной форме. Просто передайте значение 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;
}