2012-04-05 5 views
5

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

ответ

20

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

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

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

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

Добавить ваши Medias треков треков вашей композиции в:

...   
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; 

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

0

Когда U трансформирует трек, установите композицию renderSize, так как она может выйти из кадра или появится с черным блоком:

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