Я снимаю видео на iPhone 4 с фронтальной камерой и комбинирую видео с некоторыми другими медиа-активами. Я бы хотел, чтобы это видео было ориентировано на портрет - ориентация по умолчанию для всего видео пейзажа, и в некоторых случаях вам нужно управлять этим вручную.
Я использую AVFoundation и, в частности, AVAssetExportSession с AVMutableVideoComposition. Основываясь на видео WWDC, ясно, что я должен сам "фиксировать" ориентацию, когда я совмещаю видео в новую композицию.
Итак, я создал AVMutableVideoCompositionLayerInstruction, подключенный к моему AVMutableVideoCompositionInstruction, и я использую метод setTransform: atTime: для установки преобразования, предназначенного для поворота видео:
AVMutableVideoCompositionLayerInstruction *passThroughLayer = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:videoTrack];
CGAffineTransform portraitRotationTransform = CGAffineTransformMakeRotation(degreesToRadians(90.0));
[passThroughLayer setTransform:portraitRotationTransform atTime:kCMTimeZero];
Проблема заключается в том, что когда я просматриваю видео, которое экспортируется, на экране не отображается ни одно фактическое содержимое. Если я уменьшу угол поворота на 45 градусов, я вижу часть видео на экране - это почти так, как если бы он не вращался в центральной точке. Я включаю изображения ниже, чтобы сделать это более понятным, о чем я говорю.
Естественный размер видео возвращается как 480x360. Я попытался изменить это на 360x480, и это не влияет на основную проблему.
0 Степень вращения:
45 градусов вращения:
Вращение на 90 градусов только зеленое.
В любом случае, я надеюсь, кто-то, кто сделал это раньше, может указать мне в правильном направлении. Я не могу найти какие-либо документы по некоторым более продвинутым темам в композициях и экспорте AVFoundation.