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: 2
0 użytkowników, 2 gości, 0 anonimowych











