将视频输出添加到ARKit应用程序

时间:2017-07-05 07:46:14

标签: ios video avcapturesession ios11 arkit

尝试使用Apple的ARKitExample应用程序对增强现实应用程序进行快速原型设计。我一直试图添加一个按钮,允许我保存屏幕上所有内容的视频。

我已将AVCaptureSession配置为其输入设备和输出文件:

private let _session = AVCaptureSession()

构造

    if let dualCameraDevice = AVCaptureDevice.default(.builtInDualCamera, for: AVMediaType.video, position: .back) {
      defaultVideoDevice = dualCameraDevice
    } else if let backCameraDevice = AVCaptureDevice.default(.builtInWideAngleCamera, for: AVMediaType.video, position: .back) {
     defaultVideoDevice = backCameraDevice
    } 
            ...    
    let videoDeviceInput = try AVCaptureDeviceInput(device: defaultVideoDevice!)
self._session.addInput(videoDeviceInput)

输出

let movieFileOutput = AVCaptureMovieFileOutput()

if self._session.canAddOutput(movieFileOutput) {
 self._session.addOutput(movieFileOutput)
 self._session.sessionPreset = AVCaptureSession.Preset.high

 self.movieFileOutput = movieFileOutput
}

切换视频录制

guard let movieFileOutput = self.movieFileOutput else {
            return
        }


        sessionQueue.async { [unowned self] in
            if !movieFileOutput.isRecording {
                if UIDevice.current.isMultitaskingSupported {

                    self.backgroundRecordingID = UIApplication.shared.beginBackgroundTask(expirationHandler: nil)
                }

                connection before starting recording.
                let movieFileOutputConnection = self.movieFileOutput?.connection(with: AVMediaType.video)

//
                let availableVideoCodecTypes = movieFileOutput.availableVideoCodecTypes as [AVVideoCodecType]

                if availableVideoCodecTypes.contains(.hevc) {
                    movieFileOutput.setOutputSettings([AVVideoCodecKey: AVVideoCodecType.hevc], for: movieFileOutputConnection!)
                }

                // Start recording to a temporary file.
                let outputFileName = NSUUID().uuidString
                let outputFilePath = (NSTemporaryDirectory() as NSString).appendingPathComponent((outputFileName as NSString).appendingPathExtension("mov")!)
                movieFileOutput.startRecording(to: URL(fileURLWithPath: outputFilePath), recordingDelegate: self)


            } else {
//-- THIS NEVER EXECS -->>>>
                    movieFileOutput.stopRecording()
                }
            }

movieFileOutput.stopRecording()永远不会接听电话,movileFileOutput.isRecording仍为false

不确定这是否是捕获ARSCNView

视频的正确方法

感谢帮助!

1 个答案:

答案 0 :(得分:1)

查看重播工具包(https://developer.apple.com/documentation/replaykit)。

示例(不使用SceneKit)位于https://github.com/halmueller/ferries

另请考虑使用iOS 11内置的屏幕录制功能。