#pragma mark =====下面是合成视频的方法===========
- (void)vision:(PBJVision *)vision capturedVideo:(NSDictionary *)videoDict error:(NSError *)error
{
_recording = NO; //这句可能是控制完成存储之后就不能再录的。。。
if (error) {
NSLog(@"encounted an error in video capture (%@)", error);
return;
}
_currentVideo = videoDict;
NSString *videoPath = [_currentVideo objectForKey:PBJVisionVideoPathKey];
NSLog(@"_currentVideo==%@",_currentVideo);
NSLog(@"voideoPath==%@",videoPath);
//合成视频文件url的时候,必须在前面拼接一个file://因为刚才录制视频后存到沙盒里面的是以/private开头的。
NSString *videoUrlPath = [NSString stringWithFormat:@"file://%@",videoPath];
NSString *path = [[NSBundlemainBundle] pathForResource:@"angry"ofType:@"wav"];
NSURL *audioUrl = [NSURL fileURLWithPath:path];
//下面两句是分别取得视频和声音文件的url,以供合成用。
AVURLAsset* audioAsset = [[AVURLAsset alloc]initWithURL:audioUrl options:nil];
NSLog(@"audioAsset===%@==",audioAsset);
AVURLAsset* videoAsset = [[AVURLAsset alloc]initWithURL:[NSURL URLWithString:videoUrlPath] options:nil];
NSLog(@"videoAsset===%@==",videoAsset);
//下面就是合成的过程了。
AVMutableComposition* mixComposition = [AVMutableCompositioncomposition];
AVMutableCompositionTrack *compositionCommentaryTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio
preferredTrackID:kCMPersistentTrackID_Invalid];
[compositionCommentaryTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, audioAsset.duration)
ofTrack:[[audioAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0]
atTime:kCMTimeZero error:nil];
AVMutableCompositionTrack *compositionVideoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo
preferredTrackID:kCMPersistentTrackID_Invalid];
[compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration)
ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]
atTime:kCMTimeZero error:nil];
AVAssetExportSession* _assetExport = [[AVAssetExportSession alloc] initWithAsset:mixComposition
presetName:AVAssetExportPresetPassthrough];
NSString* videoName = @"export.mov"; //这里换成wmv格式的就不行了。
NSString *exportPath = [NSTemporaryDirectory() stringByAppendingPathComponent:videoName];
long long temp = [self fileSizeAtPath:exportPath];
NSLog(@"temp===%lld",temp);
// temp===381266
NSLog(@"exportPaht === %@",exportPath);
NSURL *exportUrl = [NSURL fileURLWithPath:exportPath];
if ([[NSFileManagerdefaultManager] fileExistsAtPath:exportPath])
{
[[NSFileManagerdefaultManager] removeItemAtPath:exportPath error:nil];
}
_assetExport.outputFileType = @"com.apple.quicktime-movie";
NSLog(@"file type %@",_assetExport.outputFileType);
_assetExport.outputURL = exportUrl;
_assetExport.shouldOptimizeForNetworkUse = YES;
//下面是按照上面的要求合成视频的过程。
[_assetExport exportAsynchronouslyWithCompletionHandler:
^(void ) {
// 下面是把视频存到本地相册里面,存储完后弹出对话框。
[_assetLibrarywriteVideoAtPathToSavedPhotosAlbum:[NSURLURLWithString:exportPath] completionBlock:^(NSURL *assetURL, NSError *error1) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"好的!" message: @"整合并保存成功!"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}];
}
];
}
//单个文件的大小
- (long long) fileSizeAtPath:(NSString*) filePath{
//
// NSData* data = [NSData dataWithContentsOfFile:[VoiceRecorderBaseVC getPathByFileName:_convertAmr ofType:@"amr"]];
// NSLog(@"amrlength = %d",data.length);
// NSString * amr = [NSString stringWithFormat:@"amrlength = %d",data.length];
NSFileManager* manager = [NSFileManagerdefaultManager];
if ([manager fileExistsAtPath:filePath]){
return [[manager attributesOfItemAtPath:filePath error:nil] fileSize];
}
return 0;
}