ios视频和音频的合成

#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 = [[NSBundlemainBundlepathForResource:@"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:AVMediaTypeAudioobjectAtIndex:0]

                                         atTime:kCMTimeZero error:nil];

    

    AVMutableCompositionTrack *compositionVideoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo

                                                                                   preferredTrackID:kCMPersistentTrackID_Invalid];

    [compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration)

                                   ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeVideoobjectAtIndex:0]

                                    atTime:kCMTimeZero error:nil];

    

    AVAssetExportSession* _assetExport = [[AVAssetExportSession allocinitWithAsset: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 ([[NSFileManagerdefaultManagerfileExistsAtPath:exportPath])

    {

        [[NSFileManagerdefaultManagerremoveItemAtPath: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 allocinitWithTitle@"好的!" 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:nilfileSize];

    }

    return 0;

 

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值