Как объединить портретные и ландшафтные активы в AVMutableComposition для предварительного просмотра

У меня есть AVAssets с портретной и альбомной ориентацией. Когда я проигрываю их по одному с помощью AVPlayer, они играют с правильной ориентацией. Таким образом, AVPlayer считывает AVAssetTrack preferredTransform каждого видео и корректирует их соответствующим образом.

С другой стороны, когда я добавляю портретный объект к AVMutableComposition, он отображается боком. Предположительно это связано с тем, что AVMutableCompositionTrack просто имеет значение по умолчанию preferredTransform из CGAffineTransformIdentity.

Я хочу, чтобы мой AVMutableComposition учитывал preferredTransform активов, которые я добавляю к нему, чтобы все отображалось правильно.

Часть 2

Я знаю, что могу выполнить поворот видео, предоставив инструкции по композитингу (AVMutableVideoCompositionLayerInstructions) для AVAssetExportSession, например, как объяснено здесь. Но я пока не хочу экспортировать видео.

Является ли AVAssetExportSession единственным классом, который принимает AVMutableVideoComposition в качестве входных данных?

Часть 3

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

В стороне

Кстати, я не понимаю, почему AVMutableVideoComposition сам по себе не является потомком AVAsset, как AVMutableComposition. Тогда вы можете просто воспроизвести композицию напрямую.


person bcattle    schedule 29.05.2014    source источник


Ответы (2)


   AVPlayerItem * item item = [[AVPlayerItem alloc] initWithAsset:[collageComposition mutableCopy]];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(itemDidFinishPlaying:) name:AVPlayerItemDidPlayToEndTimeNotification object:item];
item.videoComposition = [collageVideoComposition mutableCopy];
[item setSeekingWaitsForVideoCompositionRendering:NO];
item.audioMix = audioMix;
self.previewPlayer = [AVPlayer playerWithPlayerItem:item];

это все, что вам нужно для предварительного просмотра. Если вы используете animationTool в своем AVMutableVideoComposition AVPlayer, не поддерживайте его. Используйте для этой цели AVSynchronizedLayer.

person DimaC    schedule 30.05.2014
comment
что такое audioMix , можете объяснить? - person Vatsal Shukla; 05.04.2017
comment
AVAudioMix используется для пользовательской обработки звука, свойство AVPlayerItem. Подробнее здесь - person DimaC; 01.06.2017

Ах, AVPlayerItem имеет свойство videoComposition. Изменение AVPlayerItem подходит для предварительного просмотра.

person bcattle    schedule 29.05.2014