Вопрос по iphone – Как экспортировать видео актив через AVAssetExportSession в портретном режиме

6

когда я экспортирую видео актив через AVAssetExportSession, файл результата находится в режиме пространства. (файл загружается через itune-> приложения-> файлообменники-> мое приложение). Как я могу экспортировать видео актив в портретном режиме (повернуть его)?

Ваш Ответ

2   ответа
21

поступающее с устройства захвата iPhone, всегда ориентировано на альбомную ориентацию независимо от ориентации устройства при захвате.

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

Создайте 2 изменяемых дорожки в вашем объекте AVComposition:

AVMutableCompositionTrack *videoTrack = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
AVMutableCompositionTrack *audioTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];

Добавьте дорожки медиафайлов к дорожкам своей композиции:

...        
BOOL videoResult = [videoTrack insertTimeRange:sourceCMTime 
                                       ofTrack:[tracks objectAtIndex:0] 
                                        atTime:currentTime 
                                         error:&error];

BOOL audioResult = [audioTrack insertTimeRange:sourceCMTime 
                                       ofTrack:[tracks objectAtIndex:0] 
                                        atTime:currentTime 
                                         error:&error];
...

После того, как вы добавили все свои треки, примените ваше преобразование к видео дорожке вашей композиции:

    CGAffineTransform rotationTransform = CGAffineTransformMakeRotation(M_PI_2);
//    CGAffineTransform rotateTranslate = CGAffineTransformTranslate(rotationTransform,360,0);
    videoTrack.preferredTransform = rotationTransform;

(обратите внимание, что преобразование имело верхний левый угол в качестве источника, поэтому перевод был необходим после поворота, но при тестировании на iPhone 4S, iOS 5.1 кажется, что вращение теперь происходит вокруг центра.)

Необработанный пиксельный буфер всегда будет отображаться только на iPhone / iPad (и даже на Android). Только метаданные могут указывать игроку, чтобы он отображался повернутым. Если вы хотите, чтобы файл фильма или буфер необработанных пикселей был портретным, я думаю, вам придется написать свой собственный кодер, и это будет большая работа.
Я попробую. Это позволяет изменить степень поворота видео, если ваш проигрыватель (например, QuickTime) поддерживает метаданные поворота, вы можете получить портретное видео. Но буфер необработанных пикселей все еще в альбомной ориентации.
0

тем временем следует установить композицию renderSize, поскольку она может выходить за рамки или появляться с черным блоком:

self.mutableVideoComposition.renderSize = CGSizeMake(assetVideoTrack.naturalSize.height,assetVideoTrack.naturalSize.width);

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