簡體   English   中英

為什么不應用AVMutableVideoCompositionInstruction?

[英]Why aren't AVMutableVideoCompositionInstruction's being applied?

我正在使用AVAssetExportSession將多個視頻錄制連接到一個條目中。

由於用戶可以在錄制過程中在前后攝像頭之間切換,因此錄制的方向會進行切換,這樣,如果錄制內容包括使用前向攝像頭的一個剪輯和使用后攝像頭的第二個剪輯,則級聯的視頻將顯示第一個剪輯使用預期的方向,第二次倒置(反之亦然)。

我知道我需要在導出器上設置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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM