Я использовал представление наложения при вызове камеры перед записью видео.
pickerController.cameraOverlayView =myOverlay;
Запись видео и сохранение видео в альбом после записи видео и обмена по электронной почте и т.д. Все работает нормально.
Если я использую качество видео как "Высокое качество", тогда записанное видео стало огромным размером. Например, если я записываю видео в течение 30 секунд с высоким качеством, записанное видео становится около 30 - 40 мб.
pickerController.videoQuality = UIImagePickerControllerQualityTypeHigh;
Как мне настроить сжатие высококачественного записанного видео до его совместного использования, например, как Apple делает со встроенным видеомагнитофоном?
Пожалуйста, помогите мне решить эту проблему.
Спасибо!
ОБНОВЛЕНО:
Это то, что я делаю в последнее время, но все равно не добился успеха: хочу сжать записанное видео, которое приходит в файл didFinishPickingMediaWithInfo, и сохранить в том же самом видео-видео самого альбома, нигде. Я тестировал одно и то же видео, сжатое до очень небольшого размера, когда я выбираю из библиотеки фотографий, но то же видео, снятое с камеры и появившееся через didFinishPickingMediaWithInfo, не сжато, хотя я использовал код AVAssetExportSession ниже.
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
if ([mediaType isEqualToString:(NSString *)kUTTypeMovie])
{
NSURL *videoURL = [info objectForKey:UIImagePickerControllerMediaURL];
NSString *urlPath = [videoURL path];
if ([[urlPath lastPathComponent] isEqualToString:@"capturedvideo.MOV"])
{
if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum (urlPath))
{
[self copyTempVideoToMediaLibrary :urlPath];
}
else
{
NSLog(@"Video Capture Error: Captured video cannot be saved...didFinishPickingMediaWithInfo()");
}
}
else
{
NSLog(@"Processing soon to saved photos album...else loop of lastPathComponent..didFinishPickingMediaWithInfo()");
}
}
[self dismissModalViewControllerAnimated:YES];
}
- (void)copyTempVideoToMediaLibrary :(NSString *)videoURL {
dispatch_queue_t mainQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(mainQueue, ^{
ALAssetsLibrary *library = [[[ALAssetsLibrary alloc] init] autorelease];
ALAssetsLibraryWriteVideoCompletionBlock completionBlock = ^(NSURL *assetURL, NSError *error) {
NSLog(@"Saved URL: %@", assetURL);
NSLog(@"Error: %@", error);
if (assetURL != nil) {
AVURLAsset *theAsset = [AVURLAsset URLAssetWithURL:[NSURL URLWithString:videoURL] options:nil];
NSArray *compatiblePresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:theAsset];
AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:theAsset presetName:AVAssetExportPresetLowQuality];
[exportSession setOutputURL:[NSURL URLWithString:videoURL]];
[exportSession setOutputFileType:AVFileTypeQuickTimeMovie];
[exportSession exportAsynchronouslyWithCompletionHandler:^ {
switch ([exportSession status]) {
case AVAssetExportSessionStatusFailed:
NSLog(@"Export session faied with error: %@", [exportSession error]);
break;
default:
//[self mediaIsReady];
break;
}
}];
}
};
[library writeVideoAtPathToSavedPhotosAlbum:[NSURL URLWithString:videoURL] completionBlock:completionBlock];
});
}