IO

时间:2014-02-23 22:53:53

标签: ios video orientation avasset

我正在使用自定义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

用于左右方向录制。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

好的,愚蠢的,愚蠢的错误......

我忘了在输出文件中设置方向:

旋转设备或启动录制时存储

self.recordingOrientation -> AVCaptureVideoOrientation

AVCaptureConnection * CaptureConnection = [MovieFileOutput connectionWithMediaType:AVMediaTypeVideo];

if ([CaptureConnection isVideoOrientationSupported])
{
    [CaptureConnection setVideoOrientation:self.recordingOrientation];
}