AVPlayer превращает портретное видео в альбомное.

Я записываю видео с помощью AVcapture и проигрываю их в AVplayer.

    NSURL *videoUrl1 = [self.mediaInfo objectAtIndex:0];
AVURLAsset *videoAsset1 = [AVURLAsset URLAssetWithURL:videoUrl1 options:nil];
NSURL *videoUrl2 = [self.mediaInfo objectAtIndex:1];
AVURLAsset *videoAsset2 = [AVURLAsset URLAssetWithURL:videoUrl2 options:nil];
AVAssetTrack *videoTrack1 = [[videoAsset1 tracksWithMediaType:AVMediaTypeVideo]objectAtIndex:0];
AVAssetTrack *videoTrack2 = [[videoAsset2 tracksWithMediaType:AVMediaTypeVideo]objectAtIndex:0];

оба трека собраны вместе:

     [compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, video1) ofTrack:videoTrack1 atTime:kCMTimeZero error:nil];
    [compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, video2) ofTrack:videoTrack2 atTime:(compositionVideoTrack.timeRange.duration) error:nil];

и играл:

    AVPlayerItem * newPlayerItem = [AVPlayerItem playerItemWithAsset:self.composition];
//newPlayerItem.videoComposition = mainCompositionInst;
self.mediaPlayer = [AVPlayer playerWithPlayerItem:newPlayerItem];
self.playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.mediaPlayer];
[[self view].layer insertSublayer:self.playerLayer atIndex:0];
self.playerLayer.frame = [self view].layer.bounds;
self.playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill ;

[self playItem];

Странно то, что предпочтительная трансформация исходного AVURLAsset отличается от AVAssetTrack для того же самого файла:

АВУРЛАССЕТ

txf.a = 1,000000 txf.b = 0,000000 txf.c = 0,000000 txf.d = 1,000000 txf.tx = 0,000000 txf.ty = 0,000000

AVAssetTrack

txf.a = 0,000000 txf.b = 1,000000 txf.c = -1,000000 txf.d = 0,000000 txf.tx = 480,000000 txf.ty = 0,000000

Любая помощь в решении этого поворота будет высоко оценена, заранее спасибо.

CL


person Zeretyh    schedule 29.04.2015    source источник
comment
У меня такая же проблема. Можете ли вы сказать мне, как вы это решили?   -  person Gaby Fitcal    schedule 18.08.2015
comment
Решить проблему было довольно сложно, предлагаю прочитать все это, чтобы понять, как работает AVfoundation ссылка Также обратите внимание, что в зависимости от ОС и модели телефона вы получите разные результаты, поэтому в данном случае мне пришлось определить модель телефона и применить необходимые преобразования. Удачи!   -  person Zeretyh    schedule 18.08.2015


Ответы (1)


Создать видео Композицию

vidComposition = [AVMutableVideoComposition videoComposition];

установить vidComposition.instructions = mainInstruction (AVMutableVideoCompositionInstruction) после редактирования воспроизведения видео с помощью AVPlayer

Раскомментируйте newPlayerItem.videoComposition = mainCompositionInst; и установите vidComposition вместо mainCompositionInst. newPlayerItem.videoComposition = vidComposition;

Для редактирования видео этот урок может вам помочь. raywenderlich.com/13418/how-to-play-record-edit-videos-in-io‌​s

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

person i a m a g a m    schedule 22.03.2017
comment
У меня тоже есть эта проблема. Не могли бы вы проверить это stackoverflow.com/questions/43292059/? - person May Phyu; 10.04.2017
comment
@MayPhyu, я ответил на твой вопрос. это может помочь вам. - person i a m a g a m; 11.04.2017