0

2 つ以上の動画を 1 つに結合したい。私はそのためにコーディングしましたが、以下のコードを使用してそうすることができます。しかし、私の問題は、2 つ以上のビデオを 1 つのオーディオにマージした後、マージされたビデオの再生中に再生されないことです。

だから、これを手伝ってください。

AppDelegateファイルから取得した配列にすべてのビデオ URL を追加しました。

-(void)MergeVideo
{
    AppDelegate *appdel = (AppDelegate*)[[UIApplication sharedApplication] delegate];

    AVURLAsset *video01;
    AVURLAsset *video02;
    CGFloat totalDuration;
    totalDuration = 0;

    AVMutableComposition *composition = [AVMutableComposition composition];
AVMutableCompositionTrack *composedTrack = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];

    for (int i = 0; i < [appdel.arrVideoPath count]; i++)
    {
        if (i == 0)
        {
            video02 = [[AVURLAsset alloc] initWithURL:[NSURL fileURLWithPath:[appdel.arrVideoPath objectAtIndex:i]] options:nil];

            [composedTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, video02.duration) ofTrack:[[video02 tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:kCMTimeZero error:nil];
        }
        else
        {
            video01 = [[AVURLAsset alloc] initWithURL:[NSURL fileURLWithPath:[appdel.arrVideoPath objectAtIndex:i-1]] options:nil];
            video02 = [[AVURLAsset alloc] initWithURL:[NSURL fileURLWithPath:[appdel.arrVideoPath objectAtIndex:i]] options:nil];

            float duration1 = CMTimeGetSeconds([video01 duration]);
            totalDuration = totalDuration + duration1;
        CMTime time1 = CMTimeMakeWithSeconds(totalDuration, 1);

            [composedTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, video02.duration) ofTrack:[[video02 tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:time1 error:nil];
        }

        NSString* documentsDirectory= [self applicationDocumentsDirectory];
        myDocumentPath= [documentsDirectory stringByAppendingPathComponent:@"merge_video.mp4"];
        urlVideoMain = [[NSURL alloc] initFileURLWithPath: myDocumentPath];

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

        AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:composition presetName:AVAssetExportPresetHighestQuality];
        exporter.outputURL = urlVideoMain;
        exporter.outputFileType = @"com.apple.quicktime-movie";
        exporter.shouldOptimizeForNetworkUse = YES;

        [exporter exportAsynchronouslyWithCompletionHandler:^{

            switch ([exporter status])
            {
                case AVAssetExportSessionStatusFailed:
                    break;

                case AVAssetExportSessionStatusCancelled:
                    break;

                case AVAssetExportSessionStatusCompleted:
                    break;

                default:
                    break;
            }
        }];
    }
}

- (NSString*) applicationDocumentsDirectory
{
    NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString* basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
    return basePath;
}
4

0 に答える 0