我AVCaptureSession
用来录制视频,AVAssetWriterInput
我正在将视频写入文件。
我的问题是视频方向,使用苹果RosyWriter
示例,我可以转换视频, AVAssetWriterInput
以便视频处于正确的方向。
- (CGFloat)angleOffsetFromPortraitOrientationToOrientation:(AVCaptureVideoOrientation)orientation
{
CGFloat angle = 0.0;
switch (orientation) {
case AVCaptureVideoOrientationPortrait:
angle = 0.0;
break;
case AVCaptureVideoOrientationPortraitUpsideDown:
angle = M_PI;
break;
case AVCaptureVideoOrientationLandscapeRight:
angle = -M_PI_2;
break;
case AVCaptureVideoOrientationLandscapeLeft:
angle = M_PI_2;
break;
default:
break;
}
return angle;
}
- (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;
}
问题在于前置摄像头方向,在用户更改为前置摄像头后,使用此代码将不起作用。
似乎导致问题的原因是当我将凸轮更改为前面时,这些AVCaptureConnection
变化并且我为前凸轮和后凸轮获得了不同的方向。
所以也许我需要调整前后凸轮初始方向之间的差异。
我真的不想在每次用户切换摄像头时更改连接的方向,因为正如 Apple 所说的那样它会损害性能(而且当我这样做时确实看起来很糟糕),所以 Apple 建议使用该AVAssetWriterInput
transform
属性来更改输出方向,但是我不确定我是否可以使用transform
,因为我想让用户在录制时切换相机,但transform
在我开始写作后我无法更改(它崩溃了)......
任何想法如何解决这个问题?