Я записываю видео с помощью пользовательского 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
как для левой, так и для правой записи ориентации.
Любые идеи?