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秒,并产生比完全不稳定更好的结果