将 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 您描述的问题听起来像是一个错误。理想情况下,您会记录它。
我对 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 您描述的问题听起来像是一个错误。理想情况下,您会记录它。