在使用AVCaptureSession进行视频捕获时,可以通过设置预设的帧速率来控制每秒捕获的固定帧数。AVCaptureSession支持多种预设的帧速率,可以根据需求选择合适的帧速率。
要设置固定的帧速率,可以按照以下步骤进行操作:
activeFormat
属性获取当前输入设备支持的所有格式。activeVideoMinFrameDuration
和activeVideoMaxFrameDuration
属性设置所需的帧速率范围。addInput
和addOutput
方法将输入和输出设备添加到AVCaptureSession中。startRunning
方法开始捕获视频。以下是一个示例代码,展示了如何设置固定的帧速率为30帧/秒:
import AVFoundation
func setupCaptureSession() {
let captureSession = AVCaptureSession()
guard let videoDevice = AVCaptureDevice.default(for: .video) else {
print("Failed to get video device")
return
}
do {
let input = try AVCaptureDeviceInput(device: videoDevice)
if captureSession.canAddInput(input) {
captureSession.addInput(input)
}
let output = AVCaptureVideoDataOutput()
if captureSession.canAddOutput(output) {
captureSession.addOutput(output)
}
captureSession.beginConfiguration()
for format in videoDevice.formats {
let description = format.formatDescription
let dimensions = CMVideoFormatDescriptionGetDimensions(description)
if dimensions.width == 1280 && dimensions.height == 720 {
let frameRateRange = format.videoSupportedFrameRateRanges.first!
let frameRate = min(frameRateRange.maxFrameRate, 30)
do {
try videoDevice.lockForConfiguration()
videoDevice.activeFormat = format
videoDevice.activeVideoMinFrameDuration = CMTimeMake(value: 1, timescale: Int32(frameRate))
videoDevice.activeVideoMaxFrameDuration = CMTimeMake(value: 1, timescale: Int32(frameRate))
videoDevice.unlockForConfiguration()
} catch {
print("Failed to set frame rate")
}
break
}
}
captureSession.commitConfiguration()
captureSession.startRunning()
} catch {
print("Failed to create capture session")
}
}
在上述示例代码中,我们首先获取默认的视频设备,并创建一个AVCaptureDeviceInput对象作为输入设备。然后,我们创建一个AVCaptureVideoDataOutput对象作为输出设备,并将其添加到AVCaptureSession中。接下来,我们遍历视频设备支持的所有格式,找到与所需分辨率(1280x720)匹配的格式。然后,我们获取该格式支持的帧速率范围,并将所需的帧速率设置为最大帧速率和30帧/秒中的较小值。最后,我们将输入和输出设备添加到AVCaptureSession中,并调用startRunning
方法开始捕获视频。
请注意,上述示例代码是使用Swift编写的,如果您使用的是其他编程语言,请相应地进行调整。
推荐的腾讯云相关产品:腾讯云视频处理(云点播),该产品提供了丰富的视频处理功能,包括视频转码、视频截图、视频水印、视频拼接等,适用于各种视频处理场景。您可以通过以下链接了解更多信息:腾讯云视频处理产品介绍
注意:本回答中提到的腾讯云产品仅作为示例,不代表对该品牌商的推荐或支持。
领取专属 10元无门槛券
手把手带您无忧上云