我正在使用AVCaptureSession
来记录视频,使用AVAssetWriterInput
我正在将视频写入文件。
我的问题是与视频方向,使用苹果RosyWriter
的例子,我可以转换AVAssetWriterInput
所以视频将在正确的方向。AVCaptureSession前置摄像头方向
- (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
发生变化,并且我获得了前凸轮和后凸轮的不同方向。
所以也许我需要调整后面和前面凸轮的初始方向之间的差异。
我真的不想每次用户切换摄像头时都改变连接的方向,因为苹果说它会伤害到性能(而且当我这样做的时候看起来很糟糕),所以 因此苹果公司建议使用AVAssetWriterInput
transform
属性来改变输出方向,但我不知道我可以使用transform
,因为我想让用户在录制时切换相机,但在我开始写入(它崩溃)后我不能更改transform
...
任何想法如何解决这个问题?
这不是一个镜像问题,所有的框架是颠倒.. – Eyal
检查出编辑..你甚至尝试了顺便说一句吗? –
再次思考我不确定我可以使用AVAssetWriterInput转换,我想让用户在录制时切换相机,但是我无法在开始写入(崩溃)时更改AVAssetWriterInput转换,所以我认为我没有选择,但是改变AVCaptureConnection方向(我知道它会伤害性能),你不觉得吗? – Eyal