現象
captureDeviceをvideoInputに設定すると、FPSはデフォルトにリセットされてしまった
captureSession.sessionPresetを変えてもFPSはデフォルトにリセットされてしまった
原因
ビデオ入力ソースと、画質を設定するとFPSがリセットされてしまうらしい
対策
ビデオ入力ソースと、画質を設定後にFPS設定すれば効く
// 入力ソース設定
let videoInput = try! AVCaptureDeviceInput.init(device: captureDevice!)
self.captureSession.addInput(videoInput)
// 画質調整
self.captureSession.beginConfiguration()
if self.captureSession.canSetSessionPreset(AVCaptureSession.Preset.vga640x480) {
self.captureSession.sessionPreset = AVCaptureSession.Preset.vga640x480
}
else{
self.captureSession.sessionPreset = AVCaptureSession.Preset.vga640x480
}
self.captureSession.commitConfiguration()
//のあとに、FPS設定 ★★★
let frameDuration = CMTimeMake(1, Int32(self.fps))
var desiredFormat :AVCaptureDevice.Format? = nil
for format in (captureDevice?.formats)!{
for range in format.videoSupportedFrameRateRanges{
if(range.maxFrameRate >= Float64(self.fps) && range.minFrameRate <= Float64(self.fps)){
desiredFormat = format
}
}
}
if(desiredFormat != nil){
do {
try captureDevice?.lockForConfiguration()
// フレームレート設定★★★
// デフォルトは1/30
captureDevice?.activeFormat = desiredFormat!
captureDevice?.activeVideoMinFrameDuration = frameDuration
captureDevice?.activeVideoMaxFrameDuration = frameDuration
captureDevice?.unlockForConfiguration()
} catch _ {
}
}

コメント