-6

i want to merge Audio and video files in iOS

1 Answers1

2

use this i found this somewhere in net, i don't remember,....

NSString  *fileNamePath = @"audio.caf";
NSArray   *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString  *documentsDirectory = [paths  objectAtIndex:0];
NSString  *oldappSettingsPath = [documentsDirectory stringByAppendingPathComponent:fileNamePath];
NSURL *audioUrl = [NSURL fileURLWithPath:oldappSettingsPath];   
NSString  *fileNamePath1 = @"output.mp4";
NSArray   *paths1 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString  *documentsDirectory1 = [paths1  objectAtIndex:0];
NSString  *oldappSettingsPath1 = [documentsDirectory1 stringByAppendingPathComponent:fileNamePath1];
NSLog(@"oldpath=%@",oldappSettingsPath);
NSURL *videoUrl = [NSURL fileURLWithPath:oldappSettingsPath1];
if (avPlayer.duration >0.00000)
{
    NSLog(@"SOMEDATA     IS THERE ");
    AVURLAsset* audioAsset = [[AVURLAsset alloc]initWithURL:audioUrl options:nil];
    AVURLAsset* videoAsset = [[AVURLAsset alloc]initWithURL:videoUrl options:nil];

    AVMutableComposition* mixComposition = [AVMutableComposition composition];

    NSLog(@"audio =%@",audioAsset);
    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";

    NSString *exportPath = [NSTemporaryDirectory() stringByAppendingPathComponent:videoName];
    NSURL    *exportUrl = [NSURL fileURLWithPath:exportPath];

    if ([[NSFileManager defaultManager] fileExistsAtPath:exportPath]) 
    {
        [[NSFileManager defaultManager] removeItemAtPath:exportPath error:nil];
    }

    _assetExport.outputFileType = @"com.apple.quicktime-movie";
    NSLog(@"file type %@",_assetExport.outputFileType);
    _assetExport.outputURL = exportUrl;
    _assetExport.shouldOptimizeForNetworkUse = YES;



    [_assetExport exportAsynchronouslyWithCompletionHandler:
     ^(void ) 
    {      

        NSString  *fileNamePath = @"sound_record.mov";
        NSArray   *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
        NSString  *documentsDirectory = [paths  objectAtIndex:0];
        NSString  *oldappSettingsPath = [documentsDirectory stringByAppendingPathComponent:fileNamePath];


        //             if ([[NSFileManager defaultManager]    fileExistsAtPath:oldappSettingsPath]) {
//                 

//                 NSFileManager *fileManager = [NSFileManager defaultManager];  
//                 [fileManager removeItemAtPath: oldappSettingsPath error:NULL];
//                 
//             }

         NSURL *documentDirectoryURL = [NSURL fileURLWithPath:oldappSettingsPath];
         [[NSFileManager defaultManager] copyItemAtURL:exportUrl toURL:documentDirectoryURL error:nil];
         [audioAsset release];
         [videoAsset release];
         [_assetExport release];
     }       
     ];
hs.chandra
  • 707
  • 1
  • 7
  • 19
  • hi it's working fine but i have another problem, i added two audio files and saved it document directory it's saved successfully but problem is how can read that audio file (i want audio length) i am getting 0.0 using assert,please give me reply for my question.. – Prasad Rampilla Apr 08 '13 at 17:11