使用AVCaptureSessionPreset 640x480录制的视频为480x640

时间:2012-11-21 12:01:43

标签: xcode video ios6 avfoundation avcapturesession

我正在使用avfoundation录制视频,并使用captureSession设置AVCaptureSessionPreset640x480。 但录制完成后,当我看到我的视频时,其尺寸会更改为480x640。

编辑:使用纵向模式录制的问题是,您将始终获得480X640。由于设备的方向,因此需要根据方向大小旋转视频。

我已经解决了这个问题,但它根本不是偏离主题的。

- (CGAffineTransform)transformFromCurrentVideoOrientationToOrientation:(AVCaptureVideoOrientation)orientation
{


    CGAffineTransform transform = CGAffineTransformIdentity;

    // Calculate offsets from an arbitrary reference orientation (portrait)
    CGFloat orientationAngleOffset = [self angleOffsetFromPortraitOrientationToOrientation:orientation];
    CGFloat videoOrientationAngleOffset = [self angleOffsetFromPortraitOrientationToOrientation:self.videoOrientation];

    // Find the difference in angle between the passed in orientation and the current video orientation
    CGFloat angleOffset = orientationAngleOffset - videoOrientationAngleOffset;
    transform = CGAffineTransformMakeRotation(angleOffset);

    return transform;
}

2 个答案:

答案 0 :(得分:1)

您是否垂直握住手机(纵向)?使用加速度计检测到的设备方向拍摄视频。你可以force it to use landscape orientation

答案 1 :(得分:1)

使用纵向模式录制的问题是,您将始终获得480X640。由于设备的方向,因此需要根据方向大小旋转视频。

我已经解决了这个问题,但它根本不是偏离主题的。

- (CGAffineTransform)transformFromCurrentVideoOrientationToOrientation:(AVCaptureVideoOrientation)orientation
{
    CGAffineTransform transform = CGAffineTransformIdentity;

    // Calculate offsets from an arbitrary reference orientation (portrait)
    CGFloat orientationAngleOffset = [self angleOffsetFromPortraitOrientationToOrientation:orientation];
    CGFloat videoOrientationAngleOffset = [self angleOffsetFromPortraitOrientationToOrientation:self.videoOrientation];

    // Find the difference in angle between the passed in orientation and the current video orientation
    CGFloat angleOffset = orientationAngleOffset - videoOrientationAngleOffset;
    transform = CGAffineTransformMakeRotation(angleOffset);

    return transform;
}
相关问题