Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios AVCaptureSession视频稳定滞后_Ios_Swift_Avcapturesession - Fatal编程技术网

Ios AVCaptureSession视频稳定滞后

Ios AVCaptureSession视频稳定滞后,ios,swift,avcapturesession,Ios,Swift,Avcapturesession,之前,我在我的AVCaptureMovieFileOutput中添加了一个avcaptureessession,并启用了电影首选视频稳定模式,收到了很好的预期效果 我刚刚切换到一个avcapturedevideodataoutput,电影的稳定性造成了非常明显的延迟——在图像预览更新之前大约有整整一秒的延迟 设置: // Video data output let outputSettings: [String: Any] = [kCVPixelBufferPixelFormatTypeKey

之前,我在我的
AVCaptureMovieFileOutput
中添加了一个
avcaptureessession
,并启用了电影
首选视频稳定模式
,收到了很好的预期效果

我刚刚切换到一个
avcapturedevideodataoutput
,电影的稳定性造成了非常明显的延迟——在图像预览更新之前大约有整整一秒的延迟

设置:

//  Video data output
let outputSettings: [String: Any] = [kCVPixelBufferPixelFormatTypeKey as String: kCVPixelFormatType_32BGRA]
videoDataOutput = AVCaptureVideoDataOutput()
videoDataOutput?.videoSettings = outputSettings
let videoSessionQueue = DispatchQueue(label: "video_capture_session_queue")
videoDataOutput?.setSampleBufferDelegate(self, queue: videoSessionQueue)
videoDataOutput?.alwaysDiscardsLateVideoFrames = true

//  Audio data output
let audioDataOutput = AVCaptureAudioDataOutput()
let audioSessionQueue = DispatchQueue(label: "audio_capture_session_queue")
audioDataOutput.setSampleBufferDelegate(self, queue: audioSessionQueue)

//  Configure session
captureSession.beginConfiguration()

let videoInput = try AVCaptureDeviceInput(device: currentCameraDevice)
captureSession.addInput(videoInput)
captureSession.addOutput(videoDataOutput!)

if let videoDataOutputConnection = videoDataOutput?.connection(with: .video), videoDataOutputConnection.isVideoStabilizationSupported {
    videoDataOutputConnection.preferredVideoStabilizationMode = .cinematic
}

if let audioInput = AVCaptureDevice.default(for: .audio) {
    try captureSession.addInput(AVCaptureDeviceInput(device: audioInput))
    captureSession.addOutput(audioDataOutput)
}

captureSession.commitConfiguration()

captureSession.startRunning()

有人有什么见解或解决方案吗?提前感谢。

对于任何感兴趣的人,以下是我经过几天的挖掘后学到的:

当渲染到非
AVCaptureVideoPreviewLayer
时,无法避免延迟,这基本上是指在运行
AVCaptureVideoDataOutput
以处理单个帧时(对于CI和金属设置都是如此)

稳定模式
.cinematic
会导致最明显的延迟-~1秒。切换到
.standard
会将其降低到约1/10秒,并产生比完全不稳定更好的结果