ios - AVCaptureSession 视频稳定滞后

标签 ios swift avcapturesession

之前,我向我的 AVCaptureSession 添加了一个 AVCaptureMovieFileOutput 并启用了电影级 preferredVideoStabilizationMode,收到了很好的预期结果。

我刚刚切换到 AVCaptureVideoDataOutput,电影级稳定性导致了极其明显的延迟——在图像预览更新之前大约有整整一秒的延迟。

设置:

//  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 来处理单个帧(和 true用于 CI 和 Metal 设置)。

稳定模式 .cinematic 导致最明显的滞后 — ~1 秒。切换到 .standard 可将时间减少到约 1/10 秒,并且产生的结果比根本没有稳定效果要好。

关于ios - AVCaptureSession 视频稳定滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55190815/

相关文章:

iphone - Objective C 中的 int 问题

ios - 比较 Swift 中两个元组列表的重复项

ios - 选项卡栏高度和按钮大小 - 已修复?

swift - 使用 contentsOfFile 参数创建 NSData 时指定文件偏移量

将 C 结构实例复制到 Swift 后缺少成员

ios - iPhoneX 中安全区域的 UIStoryboard 约束问题(如何创建安全区域高度相等的 View ?)

ios - iphone 4s 中的 AvCapture Session 全屏

ios - 在MRC中阻止为什么此代码不会崩溃

ios - 即使设备旋转,也始终以横向录制视频(横向->纵向->横向)

ios - AVCapturePhotoCaptureDelegate 方法不是每次都被调用