在 iOS 中镜像前置摄像头视频

wiz*_*lum 1 avfoundation cgaffinetransform ios swift

我正在使用 AVFoundation 将视频录制添加到应用程序。我设法录制视频然后显示它,但后来我意识到(与预览中不同)前置摄像头视频不会沿垂直轴镜像。这似乎是标准行为,但我希望视频看起来像预览。我相信CGAffineTransform可以做到这一点,但我不确定如何将其应用到视频中。

这是我到目前为止所拥有的:

extension CameraViewController: AVCaptureFileOutputRecordingDelegate {
    func fileOutput(_ output: AVCaptureFileOutput, didFinishRecordingTo outputFileURL: URL, from connections: [AVCaptureConnection], error: Error?) {
        guard error != nil else {
            print("Error recording movie: \(error!.localizedDescription)")
            return
        }

        if self.currentCameraPosition == .front {
            mirrorVideo(outputFileURL)
        }
        performSegue(withIdentifier: "ShowVideo", sender: outputFileURL)
    }

    func mirrorVideo(_ outputFileURL: URL){
        var transform: CGAffineTransform = CGAffineTransform(scaleX: -1.0, y: 1.0)
        transform = transform.rotated(by: CGFloat(Double.pi/2))
        // Apply transform
    }
}
Run Code Online (Sandbox Code Playgroud)

MJ *_*dio 5

将输入和输出添加到AVCaptureSession后使用此方法

    private func adjustVideoMirror(){

        guard let currentCameraInput: AVCaptureDeviceInput = captureSession.inputs.first as? AVCaptureDeviceInput else {
            return
        }

        if let conn = movieOutput.connection(with: .video){
            conn.isVideoMirrored = currentCameraInput.device.position == .front
        }

    }
Run Code Online (Sandbox Code Playgroud)

关键是isVideoMirrored属性