io‹s AVAssetTrack видеоориентация

Я записываю видео с помощью пользовательского CaptureSessionManager и поворачиваю слой предварительного просмотра в соответствии с ориентацией устройства (в противном случае слой предварительного просмотра перевернут либо в альбомной ориентации, либо влево/вправо). Это работает до сих пор. Но...

Когда я пытаюсь воспроизвести видео, я использую следующий код для определения ориентации видео:

AVAssetTrack *videoTrack = [[asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
    CGSize size = [videoTrack naturalSize];
    CGAffineTransform txf = [videoTrack preferredTransform];

    if (size.width == txf.tx && size.height == txf.ty)
        return UIInterfaceOrientationLandscapeRight;
    else if (txf.tx == 0 && txf.ty == 0)
        return UIInterfaceOrientationLandscapeLeft;
    else if (txf.tx == 0 && txf.ty == size.width)
        return UIInterfaceOrientationPortraitUpsideDown;
    else
        return UIInterfaceOrientationPortrait;

Но результаты всегда одинаковы, независимо от того, левый он или правый.

Я использовал этот код для получения вывода:

AVAssetTrack *videoTrack = [[asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
    CGSize size = [videoTrack naturalSize];
    CGAffineTransform txf = [videoTrack preferredTransform];

    NSLog(@"Transformation a %f - b %f - c %f - d %f", txf.a, txf.b, txf.c, txf.d);
    NSLog(@"Transformation tx %f - ty %f", txf.tx, txf.ty);
    NSLog(@"Size width: %f - height: %f", size.width, size.height);

что приводит к:

Transformation a -1.000000 - b 0.000000 - c 0.000000 - d -1.000000
Transformation tx 1920.000000 - ty 1080.000000
Size width: 1920.000000 - height: 1080.000000

как для левой, так и для правой записи ориентации.

Любые идеи?


person Swissdude    schedule 23.02.2014    source источник
comment
хороший фрагмент кода для определения ориентации видео, спасибо!   -  person Dannie P    schedule 19.05.2014


Ответы (1)


Ладно, глупая, глупая ошибка…

Я забыл установить ориентацию в выходном файле:

self.recordingOrientation -> AVCaptureVideoOrientation сохраняется при повороте устройства или при запуске записи.

AVCaptureConnection *CaptureConnection = [MovieFileOutput connectionWithMediaType:AVMediaTypeVideo];

if ([CaptureConnection isVideoOrientationSupported])
{
    [CaptureConnection setVideoOrientation:self.recordingOrientation];
}
person Swissdude    schedule 23.02.2014
comment
здесь, что такое self. recordingOrientation?? у меня такая же проблема - person Mrugesh Tank; 26.05.2015
comment
это ориентация видео AVCaptureVideoOrientationLandscapeRight | AVCaptureVideoОриентацияПейзажСлева | AVCaptureVideoOrientationPortraitUpsideDown | AVCaptureVideoOrientationПортрет - person Swissdude; 28.05.2015