convert2Mp4 code snippet

时间:2021-11-22 09:25:43

#pragma mark - helper

- (NSURL *)convert2Mp4:(NSURL *)movUrl {

NSURL *mp4Url = nil;

AVURLAsset *avAsset = [AVURLAsset URLAssetWithURL:movUrl options:nil];

NSArray *compatiblePresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:avAsset];

if ([compatiblePresets containsObject:AVAssetExportPresetHighestQuality]) {

AVAssetExportSession *exportSession = [[AVAssetExportSession alloc]initWithAsset:avAsset

presetName:AVAssetExportPresetHighestQuality];

mp4Url = [movUrl copy];

mp4Url = [mp4Url URLByDeletingPathExtension];

mp4Url = [mp4Url URLByAppendingPathExtension:@"mp4"];

exportSession.outputURL = mp4Url;

exportSession.shouldOptimizeForNetworkUse = YES;

exportSession.outputFileType = AVFileTypeMPEG4;

dispatch_semaphore_t wait = dispatch_semaphore_create(0l);

[exportSession exportAsynchronouslyWithCompletionHandler:^{

switch ([exportSession status]) {

case AVAssetExportSessionStatusFailed: {

NSLog(@"failed, error:%@.", exportSession.error);

} break;

case AVAssetExportSessionStatusCancelled: {

NSLog(@"cancelled.");

} break;

case AVAssetExportSessionStatusCompleted: {

NSLog(@"completed.");

} break;

default: {

NSLog(@"others.");

} break;

}

dispatch_semaphore_signal(wait);

}];

long timeout = dispatch_semaphore_wait(wait, DISPATCH_TIME_FOREVER);

if (timeout) {

NSLog(@"timeout.");

}

if (wait) {

//dispatch_release(wait);

wait = nil;

}

}

return mp4Url;

}