Konwersja mov do mp4 przy użyciu AVAssetExportSession
#1
Napisano 07 listopada 2014 - 15:07
#2
Napisano 07 listopada 2014 - 16:31
#3
Napisano 12 listopada 2014 - 08:47
- (void)convertMP4:(NSDictionary *)info //słownik wyniku nagrywania UIImagePickerController { NSString *videoPath1 = @""; NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType]; if (CFStringCompare((__bridge_retained CFStringRef)mediaType, kUTTypeMovie, 0) == kCFCompareEqualTo) { NSString *docDir = [NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; videoPath1 = [NSString stringWithFormat:@"%@/tempv.mov", docDir]; NSData *videoData = [NSData dataWithContentsOfURL: [info objectForKey:UIImagePickerControllerMediaURL]]; [videoData writeToFile:videoPath1 atomically:NO]; } CFRelease((__bridge CFStringRef)(mediaType)); // CRA AVURLAsset *avAsset = [AVURLAsset URLAssetWithURL:[NSURL fileURLWithPath:videoPath1] options:nil]; NSArray *compatiblePresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:avAsset]; if ([compatiblePresets containsObject:AVAssetExportPreset1280x720]) { AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:avAsset presetName:AVAssetExportPreset1280x720]; exportSession.shouldOptimizeForNetworkUse = NO; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *videoPath = [NSString stringWithFormat:@"%@/test.mp4", [paths objectAtIndex:0]]; NSFileManager *fileManager = [NSFileManager defaultManager]; NSError *error; BOOL success = [fileManager removeItemAtPath:videoPath error:&error]; if (!success) { NSLog(@"Could not delete file -:%@ ", [error localizedDescription]); } self.mp4VideoPath = videoPath; exportSession.outputURL = [NSURL fileURLWithPath:videoPath]; NSLog(@"videopath of mp4 file = %@", videoPath); exportSession.outputFileType = AVFileTypeMPEG4; [exportSession exportAsynchronouslyWithCompletionHandler:^{ [[NSFileManager defaultManager] removeItemAtPath:videoPath1 error:nil]; switch ([exportSession status]) { case AVAssetExportSessionStatusFailed: NSLog(@"Export failed:%@", [[exportSession error] localizedDescription]); break; case AVAssetExportSessionStatusCancelled: NSLog(@"Export canceled"); break; case AVAssetExportSessionStatusCompleted: NSLog(@"%@", self.mp4VideoPath); self.audioVideoData = [NSData dataWithContentsOfURL:[NSURL fileURLWithPath:self.mp4VideoPath]]; NSLog(@"Export completed "); break; default: break; } }]; } }
#4
Napisano 17 listopada 2014 - 09:26
Nie pamiętam dużo z tego bo dawno nie robiłem, ale w dokumentacji stoi:
[COLOR=#808080][FONT=Menlo][SIZE=12px]+ ([/SIZE][/FONT][/COLOR][COLOR=#B833A1][FONT=Menlo][SIZE=12px]AVAssetExportSession *[/SIZE][/FONT][/COLOR][COLOR=#808080][FONT=Menlo][SIZE=12px])[/SIZE][/FONT][/COLOR][COLOR=#2E0D6E][FONT=Menlo][SIZE=12px]exportSessionWithAsset:[/SIZE][/FONT][/COLOR][COLOR=#808080][FONT=Menlo][SIZE=12px]([/SIZE][/FONT][/COLOR][COLOR=#6F41A7][FONT=Menlo][SIZE=12px][URL="https://developer.apple.com/LIBRARY/ios/documentation/AVFoundation/Reference/AVAsset_Class/index.html#//apple_ref/doc/c_ref/AVAsset"]AVAsset[/URL] *[/SIZE][/FONT][/COLOR][COLOR=#808080][FONT=Menlo][SIZE=12px])[/SIZE][/FONT][/COLOR][I]asset[/I] [COLOR=#2E0D6E][FONT=Menlo][SIZE=12px]presetName:[/SIZE][/FONT][/COLOR][COLOR=#808080][FONT=Menlo][SIZE=12px]([/SIZE][/FONT][/COLOR][COLOR=#6F41A7][FONT=Menlo][SIZE=12px][URL="https://developer.apple.com/LIBRARY/ios/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/index.html#//apple_ref/doc/c_ref/NSString"]NSString[/URL] *[/SIZE][/FONT][/COLOR][COLOR=#808080][FONT=Menlo][SIZE=12px])[/SIZE][/FONT][/COLOR][I]presetName[/I]
[COLOR=#6F41A7][FONT=Menlo][SIZE=12px]NSString[/SIZE][/FONT][/COLOR][COLOR=#000000][FONT=Menlo][SIZE=12px]*[/SIZE][/FONT][/COLOR][COLOR=#AA0D91][FONT=Menlo][SIZE=12px]const[/SIZE][/FONT][/COLOR][COLOR=#6F41A7][FONT=Menlo][SIZE=12px]AVAssetExportPresetLowQuality[/SIZE][/FONT][/COLOR][COLOR=#000000][FONT=Menlo][SIZE=12px];[/SIZE][/FONT][/COLOR] [COLOR=#6F41A7][FONT=Menlo][SIZE=12px]NSString[/SIZE][/FONT][/COLOR][COLOR=#000000][FONT=Menlo][SIZE=12px]*[/SIZE][/FONT][/COLOR][COLOR=#AA0D91][FONT=Menlo][SIZE=12px]const[/SIZE][/FONT][/COLOR][COLOR=#6F41A7][FONT=Menlo][SIZE=12px]AVAssetExportPresetMediumQuality[/SIZE][/FONT][/COLOR][COLOR=#000000][FONT=Menlo][SIZE=12px];[/SIZE][/FONT][/COLOR] [COLOR=#6F41A7][FONT=Menlo][SIZE=12px]NSString[/SIZE][/FONT][/COLOR][COLOR=#000000][FONT=Menlo][SIZE=12px]*[/SIZE][/FONT][/COLOR][COLOR=#AA0D91][FONT=Menlo][SIZE=12px]const[/SIZE][/FONT][/COLOR][COLOR=#6F41A7][FONT=Menlo][SIZE=12px]AVAssetExportPresetHighestQuality[/SIZE][/FONT][/COLOR][COLOR=#000000][FONT=Menlo][SIZE=12px];[/SIZE][/FONT][/COLOR]
Za presetName powinno być któreś z powyższych, sprawdzałeś to ?
#5
Napisano 18 listopada 2014 - 09:35
[FONT=Menlo][SIZE=11px]- ([COLOR=#bb2ca2]void[/COLOR])imagePickerController:([COLOR=#703daa]UIImagePickerController[/COLOR] *)picker[/SIZE][/FONT] [FONT=Menlo][SIZE=11px] didFinishPickingMediaWithInfo:([COLOR=#703daa]NSDictionary[/COLOR] *)info[/SIZE][/FONT]
Tak z ciekawości to gdzie mogę zapisywać filmy tak żeby nie były przechowywane w albumie?
#6
Napisano 21 listopada 2014 - 11:40
[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
Pamiętać trzeba o czyszczeniu tego. Używam firstObject bo się nie sypnie, tylko walnie nil jak tabilica będzie pusta, a objectAtIndex się wysypie.
A i jedno jeszcze:
[FONT=Courier][SIZE=12px][paths objectAtIndex:0][/SIZE][/FONT]zastąp sobie
paths[0];
#7
Napisano 21 listopada 2014 - 13:00
#8
Napisano 24 listopada 2014 - 11:47
chyba wiem gdzie jest błąd przy przycinaniu jest zmieniany rozmiar, po mimo że mam tam ustawioną wartość UIImagePickerControllerQualityTypeIFrame1280x720 dla videoQuality.
testuje na iPhonei 5 i ios 7.1.2
if ([UIVideoEditorController canEditVideoAtPath:self.videoPath]) { self.editor = [[UIVideoEditorController alloc] init]; self.editor.videoPath = self.videoPath;//prawidłowa rozdzielczość self.editor.videoMaximumDuration = 180.0; #if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_5_0 self.editor.videoQuality = UIImagePickerControllerQualityTypeIFrame1280x720; #elif __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0 self.editor.videoQuality = UIImagePickerControllerQualityType640x480; // VGA quality #endif self.editor.delegate = self; [self.navigationController presentViewController:self.editor animated:NO completion:nil]; } else { NSLog(@"can't edit video at %@", self.videoPath); }
Użytkownik macQUB edytował ten post 02 grudnia 2014 - 15:09
Użytkownicy przeglądający ten temat: 1
0 użytkowników, 1 gości, 0 anonimowych