●現象
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 _ { } }
コメント