AVPreviewLayer を使用したフルスクリーンの avcapturesession があります。
カメラを切り替えると、プレビューレイヤーはビデオを正しく表示しますが、保存するとビデオが上下逆になります。
ビデオ出力ファイルの接続のためにミラーリングとランドスケープの左右のプロパティをいじってみましたが、役に立ちませんでした。
これは、カメラを切り替えるメソッドです。
- (void)swapFrontAndBackCameras {
// Assume the session is already running
NSArray * inputs = self . session.inputs;
for (AVCaptureDeviceInput * INPUT in inputs) {
AVCaptureDevice * Device = INPUT.device ;
if ( [ Device hasMediaType : AVMediaTypeVideo ] ) {
AVCaptureDevicePosition position = Device.position;
AVCaptureDevice * newCamera = nil;
AVCaptureDeviceInput * newInput = nil;
if(position == AVCaptureDevicePositionFront) {
newCamera = [ self cameraWithPosition : AVCaptureDevicePositionBack];
}
else
{
newCamera = [ self cameraWithPosition : AVCaptureDevicePositionFront];
}
newInput = [AVCaptureDeviceInput deviceInputWithDevice:newCamera error:nil];
[self.session beginConfiguration ] ;
[self.session removeInput:INPUT ] ;
[self.session addInput:newInput ] ;
AVCaptureConnection *videoConnection = nil;
for ( AVCaptureConnection *connection in [self.movieFileOutput connections] )
{
NSLog(@"%@", connection);
for ( AVCaptureInputPort *port in [connection inputPorts] )
{
NSLog(@"%@", port);
if ( [[port mediaType] isEqual:AVMediaTypeVideo] )
{
videoConnection = connection;
}
}
}
[videoConnection setVideoOrientation:AVCaptureVideoOrientationLandscapeRight]; // This does it for the previewlayer only, not the output file :(
[self.session commitConfiguration ] ;
break;
}
}
}