использовать fileOutput для сохранения видео в фотогалерею - PullRequest
0 голосов
/ 03 февраля 2020

Цель моего быстрого кода ниже - автоматически записать 5-секундное видео и сохранить его в фотогалерее при создании кода. В шутку c fileOut Я предполагаю, что именно здесь вы сохраняете видео в фотогалерею. Я не знаю, что положить в fileOutput. Но fileOutPut требуется в моем коде для запуска. Я думаю, что у меня есть весь код, чтобы сделать это, но я могу упустить что-то еще.

   import AVFoundation;import UIKit
 class ViewController: UIViewController, AVCaptureFileOutputRecordingDelegate {
func fileOutput(_ output: AVCaptureFileOutput, didFinishRecordingTo outputFileURL: URL, from connections: [AVCaptureConnection], error: Error?) {

}


var captureSession = AVCaptureSession()
var sessionOutput = AVCaptureStillImageOutput()
var movieOutput = AVCaptureMovieFileOutput()
var previewLayer = AVCaptureVideoPreviewLayer()

@IBOutlet var cameraView: UIView!


override func viewWillAppear(_ animated: Bool) {
    self.cameraView = self.view

    let devices = AVCaptureDevice.devices(for: AVMediaType.video)
    for device in devices {
        if device.position == AVCaptureDevice.Position.front{


            do{

                let input = try AVCaptureDeviceInput(device: device )

                if captureSession.canAddInput(input){

                    captureSession.addInput(input)
                    sessionOutput.outputSettings = [AVVideoCodecKey : AVVideoCodecType.jpeg]

                    if captureSession.canAddOutput(sessionOutput){

                        captureSession.addOutput(sessionOutput)

                        previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
                        previewLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
                        previewLayer.connection!.videoOrientation = AVCaptureVideoOrientation.portrait
                        cameraView.layer.addSublayer(previewLayer)

                        previewLayer.position = CGPoint(x: self.cameraView.frame.width / 2, y: self.cameraView.frame.height / 2)
                        previewLayer.bounds = cameraView.frame


                    }

                    captureSession.addOutput(movieOutput)

                    captureSession.startRunning()

                    let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
                   let documentURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
                    let fileURL = documentURL.appendingPathComponent("tempImage.jpg")
                    try? FileManager.default.removeItem(at: fileURL)
                    movieOutput.startRecording(to: fileURL, recordingDelegate: self)


                    let deadlineTime = DispatchTime.now() + .seconds(1)
                    DispatchQueue.main.asyncAfter(deadline: deadlineTime) {
                        print("test")
                             self.movieOutput.stopRecording()
                    }



                }

            }
            catch{

                print("Error")
            }

        }
    }

}

func captureOutput(captureOutput: AVCaptureFileOutput!, didFinishRecordingToOutputFileAtURL outputFileURL: NSURL!, fromConnections connections: [AnyObject]!, error: NSError!) {
    print("FINISHED \(error)")
    // save video to camera roll
    if error == nil {
        UISaveVideoAtPathToSavedPhotosAlbum(outputFileURL.path!, nil, nil, nil)
    }
}

    }
...