我正在使用自定义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
用于左右方向录制。
有什么想法吗?
答案 0 :(得分:0)
好的,愚蠢的,愚蠢的错误......
我忘了在输出文件中设置方向:
旋转设备或启动录制时存储 self.recordingOrientation -> AVCaptureVideoOrientation
。
AVCaptureConnection * CaptureConnection = [MovieFileOutput connectionWithMediaType:AVMediaTypeVideo];
if ([CaptureConnection isVideoOrientationSupported])
{
[CaptureConnection setVideoOrientation:self.recordingOrientation];
}