AVMutableComposition - поворот портретных видео для размещения в альбомной ориентации (16: 9) - PullRequest
0 голосов
/ 28 августа 2018

Я использую AVMutableComposition для объединения и создания видео в формате 16: 9. Проблема в том, что любые видео, снятые в портретном режиме, отображаются как повернутые внутри видео. Теперь я считаю, что мне нужно использовать уровень инструкций, но я не уверен, как добавить его в следующий код.

- (void)combineTheAssets {


    AVMutableComposition *mixComposition = [[AVMutableComposition alloc] init];

    [mixComposition setNaturalSize:CGSizeMake(1280, 720)];

    AVMutableCompositionTrack *track = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo
                                                                   preferredTrackID:kCMPersistentTrackID_Invalid];

    AVMutableCompositionTrack *audioTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio
                                                                        preferredTrackID:kCMPersistentTrackID_Invalid];



    int i = 0;

    for (NSMutableDictionary * dict in self.arraySelectedAssets) {

        AVAsset *asset = [dict objectForKey:@"avasset"];


        CMTime insertTime = kCMTimeZero;


            CMTimeRange timeRange = CMTimeRangeMake(kCMTimeZero, asset.duration);

            [track insertTimeRange:timeRange
                                ofTrack:[[asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]
                                 atTime:insertTime
                                  error:nil];

            [audioTrack insertTimeRange:timeRange
                                ofTrack:[[asset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0]
                                 atTime:insertTime
                                  error:nil];


            insertTime = CMTimeAdd(insertTime,asset.duration);


        i = i + 1;

    }

    // 4 - Get path
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *myPathDocs =  [documentsDirectory stringByAppendingPathComponent:
                             [NSString stringWithFormat:@"mergeVideo-%d.mov",arc4random() % 1000]];
    self.combinedVideoURL = [NSURL fileURLWithPath:myPathDocs];

    // 5 - Create exporter

    self.timerExporter = [NSTimer scheduledTimerWithTimeInterval:0.01f
                                             target:self
                                           selector:@selector(exporterProgress)
                                           userInfo:nil
                                            repeats:YES];

    // 5 - Create exporter
    self.exporter = [[AVAssetExportSession alloc] initWithAsset:mixComposition
                                                                      presetName:AVAssetExportPresetHighestQuality];
    self.exporter .outputURL=self.combinedVideoURL;
    self.exporter .outputFileType = AVFileTypeQuickTimeMovie;
    self.exporter .shouldOptimizeForNetworkUse = YES;
    [self.exporter  exportAsynchronouslyWithCompletionHandler:^{

        [self.timerExporter invalidate];

        dispatch_async(dispatch_get_main_queue(), ^{
            self.labelProgressText.text = [NSString stringWithFormat:@"%@ (100%%)", NSLocalizedString(@"Combining The Videos", nil)];
            [self applyTheFilter];
        });
    }];

}
...