документация для STL [закрыто]

По умолчанию при экспорте видео с использованием AVAssetExportSession видео будет повернуто из исходной ориентации. Вы должны применить его преобразование, чтобы установить его точную ориентацию. Вы должны сделать код ниже, чтобы сделать то же самое.

- (AVMutableVideoCompositionLayerInstruction *)layerInstructionAfterFixingOrientationForAsset:(AVAsset *)inAsset 
                                                                                     forTrack:(AVMutableCompositionTrack *)inTrack
                                                                                       atTime:(CMTime)inTime
{
    //FIXING ORIENTATION//
    AVMutableVideoCompositionLayerInstruction *videolayerInstruction = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:inTrack];
    AVAssetTrack *videoAssetTrack = [[inAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
    UIImageOrientation videoAssetOrientation_  = UIImageOrientationUp;
    BOOL  isVideoAssetPortrait_  = NO;
    CGAffineTransform videoTransform = videoAssetTrack.preferredTransform;

    if(videoTransform.a == 0 && videoTransform.b == 1.0 && videoTransform.c == -1.0 && videoTransform.d == 0)  {videoAssetOrientation_= UIImageOrientationRight; isVideoAssetPortrait_ = YES;}
    if(videoTransform.a == 0 && videoTransform.b == -1.0 && videoTransform.c == 1.0 && videoTransform.d == 0)  {videoAssetOrientation_ =  UIImageOrientationLeft; isVideoAssetPortrait_ = YES;}
    if(videoTransform.a == 1.0 && videoTransform.b == 0 && videoTransform.c == 0 && videoTransform.d == 1.0)   {videoAssetOrientation_ =  UIImageOrientationUp;}
    if(videoTransform.a == -1.0 && videoTransform.b == 0 && videoTransform.c == 0 && videoTransform.d == -1.0) {videoAssetOrientation_ = UIImageOrientationDown;}

    CGFloat FirstAssetScaleToFitRatio = 320.0 / videoAssetTrack.naturalSize.width;

    if(isVideoAssetPortrait_) {
        FirstAssetScaleToFitRatio = 320.0/videoAssetTrack.naturalSize.height;
        CGAffineTransform FirstAssetScaleFactor = CGAffineTransformMakeScale(FirstAssetScaleToFitRatio,FirstAssetScaleToFitRatio);
        [videolayerInstruction setTransform:CGAffineTransformConcat(videoAssetTrack.preferredTransform, FirstAssetScaleFactor) atTime:kCMTimeZero];
    }else{
        CGAffineTransform FirstAssetScaleFactor = CGAffineTransformMakeScale(FirstAssetScaleToFitRatio,FirstAssetScaleToFitRatio);
        [videolayerInstruction setTransform:CGAffineTransformConcat(CGAffineTransformConcat(videoAssetTrack.preferredTransform, FirstAssetScaleFactor),CGAffineTransformMakeTranslation(0, 160)) atTime:kCMTimeZero];
    }
    [videolayerInstruction setOpacity:0.0 atTime:inTime];
    return videolayerInstruction;
}

Надеюсь, это поможет вам.

AVAssetTrack *assetTrack = [[inAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];

AVMutableCompositionTrack *mutableTrack = [mergeComposition mutableTrackCompatibleWithTrack:assetTrack];

AVMutableVideoCompositionLayerInstruction *assetInstruction = [self layerInstructionAfterFixingOrientationForAsset:inAsset forTrack:myLocalVideoTrack atTime:videoTotalDuration];

Выше это код для вызова упомянутого метода, где inAsset является вашим видеообъявлением, а videoTotalDuration - ваша общая продолжительность видео в CMTime.mergeComposition является объектом класса AVMutableComposition.

Надеюсь, это поможет.

EDIT: это не какой-либо метод или событие обратного вызова, вы должны назвать его ожидаемым с помощью необходимых параметров, как указано выше.

13
задан BCS 27 August 2009 в 23:41
поделиться

6 ответов

Здесь - ссылка, которую я с помощью. SGI, Offline Download

Здесь еще одна ссылка

15
ответ дан 1 December 2019 в 19:08
поделиться
8
ответ дан 1 December 2019 в 19:08
поделиться

Если вам нужны мертвые деревья, может быть, вам лучше взять настоящую книгу? Я нашел это незаменимым: Стандартная библиотека C ++: Учебное пособие и справочник Николая М. Йосуттиса

11
ответ дан 1 December 2019 в 19:08
поделиться

В общем, лучше всего использовать документацию, поставляемую с вашей цепочкой инструментов C ++. Для документов общего назначения мне нравится документация GNU libstdc ++ .

Если вы ищете подходящую ссылку, то, действительно, ничто не может сравниться с «ISO / IEC 14882: 2003 - Язык программирования C ++» - в конце концов, это первоисточник. Я не знаю ни одного законного способа получить для этого PDF бесплатно. Вы можете купить PDF в ISO, но они просят за это ~ 300 долларов, на мой взгляд, слишком много. Более дешевый вариант - обратиться в один из национальных органов по стандартизации, которые создают ISO - они переиздают эти стандарты под своим собственным именем (но в остальном без изменений), и обычно цены более разумные. Самая дешевая бумажная версия, о которой я знаю, опубликована Британским институтом стандартов - и доступна на Amazon за 85 долларов. Самый дешевый загружаемый PDF-файл, кажется, составляет 40 долларов в магазине австралийской членской организации .

3
ответ дан 1 December 2019 в 19:08
поделиться

Если вы собираетесь заниматься C ++, то вам понадобится книга Страуструпа "Язык программирования C ++". Это отличная ссылка на STL. Я постоянно обращаюсь к нему по поводу всего, что связано с алгоритмами и контейнерами.

Если вам нужен практический учебный подход, попробуйте книгу Джозаттиса, рекомендованную Марком Рэнсомом.

1
ответ дан 1 December 2019 в 19:08
поделиться

И как только вы закончите читать все предлагаемые здесь ссылки, обязательно взгляните на «Эффективный STL» Скотта Мейерса.

1
ответ дан 1 December 2019 в 19:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: