将 AVCaptureDevice 设置为 1 fps 时出现相机问题

Camera issue when setting AVCaptureDevice to 1 fps

我对 AVFoundation 框架有疑问。每当我将相机的 FPS 设置为 1 时,一段时间后,我的 FaceTime HD 相机 LED 开始以一秒的间隔闪烁。此外,不再调用委托(示例缓冲区委托)。

当我将它设置为 2 FPS 时没有出现问题,但对于我正在开发的应用程序,我需要将它设置为 1 FPS。

如果其他人在将相机设置为 1 FPS 时出现问题,请在此处查看。如有必要,我会 post 向 Apple 报告错误。 我使用的是 2013 年年中的 Macbook Air,运行 macOS 10.13.3。

这是我用来设置 FPS 的代码:

/// Set the frame rate of the current av capture session, if it is supported by the camera.
///
/// - Parameter fps: The desired frames per second.
func set(fps: Int) {

    guard let captureDevice = captureDevice,
        let format = captureDevice.activeFormat else { return }
    let doubleFPS = Double(fps)

    // Lock the device before changing the frame rate.
    try? captureDevice.lockForConfiguration()

    // Look for a supported frame rate range that is supported by the camera.
    for range in format.videoSupportedFrameRateRanges as! [AVFrameRateRange] {
        if range.minFrameRate <= doubleFPS &&
            range.maxFrameRate >= doubleFPS {
            let time: CMTime = CMTime(value: 1, timescale: CMTimeScale(fps))
            captureDevice.activeVideoMaxFrameDuration = time
            captureDevice.activeVideoMinFrameDuration = time
            break
        }
    }

    // Unlock the device now that we are done.
    captureDevice.unlockForConfiguration()
}

如何处理帧?如果你用 AVCaptureVideoDataOutput 来做,你可以丢弃任何你不想达到你想要的帧率的帧。如果您正在录制到文件(例如 AVCaptureMovieFileOutput),则不能。

p.s 您描述的问题听起来像是一个错误。理想情况下,您会记录它。