【发布时间】:2013-06-08 09:26:52
【问题描述】:
我正在使用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建议使用AVAssetWriterInputtransform属性来改变输出方向,但我不确定我可以使用transform,因为我想让用户在录制时切换相机但我不能改变我开始写作后的transform(它崩溃了)......
有什么办法解决这个问题吗?
【问题讨论】:
标签: iphone ios objective-c avfoundation avassetwriter