Технические вопросы и ответы QA1744

Установка ориентации видео с Основой AV

Q: Как я устанавливаю ориентацию видео с Основой AV?

A: Получение основы AV

AVCaptureConnection

Можно установить желаемую ориентацию на a AVCaptureConnection указать, как Вы хотите изображения, ориентированные в AVCaptureOutput (AVCaptureMovieFileOutput, AVCaptureStillImageOutput и AVCaptureVideoDataOutput) для соединения.

Используйте AVCaptureConnection supportsVideoOrientation свойство (getter= isVideoOrientationSupported) определить ли поддержка объектов, изменяющая ориентацию видео, и videoOrientation свойство, чтобы указать, как Вы хотите изображения, ориентированные в выходном порту. Вот фрагмент кода, показывающий, как установить ориентацию для a AVCaptureConnection к AVCaptureVideoOrientationLandscapeLeft:

Перечисление 1  , Устанавливающее ориентацию для a AVCaptureConnection.

#import <AVFoundation/AVFoundation.h>
 
AVCaptureConnection *captureConnection = <#A capture connection#>;
if ([captureConnection isVideoOrientationSupported])
{
    AVCaptureVideoOrientation orientation = AVCaptureVideoOrientationLandscapeLeft;
    [captureConnection setVideoOrientation:orientation];
}

AVCaptureMovieFileOutput, AVCaptureStillImageOutput и AVCaptureVideoDataOutput

В настоящее время, выводы получения AVCaptureMovieFileOutput, AVCaptureStillImageOutput, и AVCaptureVideoDataOutput поддерживайте набор ориентации на AVCaptureConnection как показано в Перечислении 1.

Клиенты могут получить физически повернутый CVPixelBuffers в их AVCaptureVideoDataOutput -captureOutput:didOutputSampleBuffer:fromConnection: обратный вызов делегата. Все 4 AVCaptureVideoOrientation режимы поддерживаются, и вращение аппаратно ускорено. Для запроса буферного вращения клиент вызывает -setVideoOrientation: на AVCaptureVideoDataOutputвидео AVCaptureConnection как показано в Перечислении 1.

AVCaptureVideoPreviewLayer

Точно так же AVCaptureVideoPreviewLayer (CALayer подкласс), поддерживает a orientationSupported (getter=isOrientationSupported) свойство для определения, ли поддержки дисплея уровня, изменяющие ориентацию и a orientation свойство для установки ориентации уровня для видео, выведенного на экран, поскольку это получается устройством ввода данных. Вот фрагмент кода, показывающий, как установить ориентацию для a AVCaptureVideoPreviewLayer к AVCaptureVideoOrientationPortrait:

Перечисление 2  , Устанавливающее ориентацию для a AVCaptureVideoPreviewLayer.

#import <AVFoundation/AVFoundation.h>
 
AVCaptureVideoPreviewLayer *captureVideoPreviewLayer = <#A capture video preview layer#>;
if ([captureVideoPreviewLayer isOrientationSupported])
{
    AVCaptureVideoOrientation orientation = AVCaptureVideoOrientationPortrait;
    [captureVideoPreviewLayer setOrientation:orientation];
}

AVAssetWriter

Если Вы используете AVAssetWriter возразите для записи файла ролика, можно использовать transform свойство связанного AVAssetWriterInput указать ориентацию выходного файла. Это запишет, что дисплей преобразовывает свойство в выходной файл как предпочтительная трансформация визуальных данных носителей в целях дисплея. Посмотрите AVAssetWriterInput.h интерфейсный файл для подробных данных.

AVMutableComposition, AVMutableVideoComposition и AVAssetExportSession

AVMutableComposition

Если Вы используете AVMutableComposition для редактирования визуальных активов можно установить preferredTransform свойство на любом из видеотреков (AVMutableCompositionTrack).

AVMutableVideoComposition

Если Вы используете AVMutableVideoComposition для редактирования видеотреков в видео составе используйте AVMutableVideoCompositionLayerInstruction объект изменить преобразование для применения к данной дорожке в видео составе. Используйте setTransform:atTime: метод, чтобы установить значение преобразования за один раз в диапазоне времени инструкции или использовать setTransformRampFromStartTransform:toEndTransform:timeRange: метод для установки ската преобразования для применения во время данного диапазона времени.

Иначе, если Вы указываете AVAssetExportPresetPassthrough опция экспорта позволить всем дорожкам пройти, но Вы все еще хотите установить преобразование на составе, установить preferredTransform свойство на составе отслеживает, как описано выше.



История версии документа


ДатаПримечания
29.04.2013

Обновленный для включения информации о AVMutableComposition, AVMutableVideoComposition и AVAssetExportSession.

24.01.2013

Добавленная информация о физическом вращении CVPixelBuffers в AVCaptureVideoDataOutput-captureOutput:didOutputSampleBuffer:fromConnection: обратный вызов делегата.

29.06.2011

Новый документ, описывающий, как установить ориентацию видео с Основой AV.