4

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;
        }
    } 
}
4

0 に答える 0