2013-02-12 10 views
2

AVAssetExportSession을 사용하여 여러 비디오 레코딩을 단일 항목으로 연결합니다.AVMutableVideoCompositionInstruction이 적용되지 않는 이유는 무엇입니까?

녹음 중에 앞뒤 카메라를 전환 할 수 있으므로 촬영 방향이 앞으로 향하는 카메라를 사용하는 클립 하나와 뒤를 사용하는 두 번째 클립으로 구성되면 전환됩니다. 첫 번째 클립을 예상 된 방향을 사용하고 두 번째 클립을 거꾸로 (또는 그 반대) 보여줍니다.

수출 업체에서 videoComposition 안내를 설정해야한다는 것을 알고 있지만 내 보낸 비디오에 적용 할 회전을 얻지는 못했습니다.

아래 예제에서는 보드 전체에 변경을 가하기 위해 90 도의 더미 회전 변환을 설정하고 있지만 내 보낸 비디오는 영향을받지 않습니다. . . 내가 뻔한 것을 놓치고있는 것 같아요. 그러나 나는 무엇을 볼 수 없습니다. 누군가 내 실수를 볼 수 있습니까?

AVMutableComposition *composition = [AVMutableComposition composition]; 
    AVAssetExportSession *assetExport = [AVAssetExportSession exportSessionWithAsset:composition presetName:AVAssetExportPresetPassthrough]; 
    NSMutableArray *instructions = [NSMutableArray new]; 

    AVMutableCompositionTrack *compositionVideoTrack = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; 
    AVMutableCompositionTrack *compositionAudioTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid]; 
    CGAffineTransform transformToApply=CGAffineTransformMakeRotation(90.0); 

    for (NSURL *path in filePaths) { 
     NSLog(@"%@", path); 
     AVURLAsset *asset =[AVURLAsset assetWithURL:path]; 

     CMTime atTime = composition.duration; 
     [compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, asset.duration) 
             ofTrack:[[asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] 
             atTime:atTime error:&error]; 

     AVMutableVideoCompositionLayerInstruction *layerInstruction = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:[[asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]]; 
     [layerInstruction setTransform:transformToApply atTime:kCMTimeZero];    
     AVMutableVideoCompositionInstruction * videoTrackInstruction = [AVMutableVideoCompositionInstruction videoCompositionInstruction]; 
     videoTrackInstruction.timeRange = CMTimeRangeMake(atTime, asset.duration); 
     videoTrackInstruction.layerInstructions = [NSArray arrayWithObject:layerInstruction]; 
     [instructions addObject:videoTrackInstruction]; 

     [compositionAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, asset.duration) 
             ofTrack:[[asset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0] 
             atTime:atTime error:&error]; 
    } 
    AVMutableVideoComposition *videoComposition = [AVMutableVideoComposition videoComposition]; 
    videoComposition.instructions = instructions; 
    videoComposition.frameDuration = CMTimeMake(1, compositionVideoTrack.naturalTimeScale); 
    videoComposition.renderSize = compositionVideoTrack.naturalSize; 
    assetExport.videoComposition = videoComposition; 

답변

관련 문제