如何使用AVFoundation和摄像机视图更改fps并隐藏状态栏

时间:2017-08-01 23:27:38

标签: ios swift camera avfoundation frame-rate

我正在使用AVFoundation并制作全屏摄像机视图。我似乎无法更改fps并隐藏状态栏。我希望将fps设置为140 fps(对于iPhone 7)并且我还希望隐藏状态栏(我在故事板文件和Xcode应用程序设置的常规选项卡中更改了它。如何我实现了这一点?提前谢谢!(我使用的是Swift 3.0,更喜欢Swift 3中的答案(如果可能的话))

ViewController代码:`class ViewController:UIViewController {

@IBOutlet var cameraView: UIImageView!
let captureSession = AVCaptureSession()
let stillImageOutput = AVCaptureStillImageOutput()
var previewLayer : AVCaptureVideoPreviewLayer?

var captureDevice : AVCaptureDevice?

func beginSession() {

    do {
        try captureSession.addInput(AVCaptureDeviceInput(device: captureDevice))
        stillImageOutput.outputSettings = [AVVideoCodecKey:AVVideoCodecJPEG]

        if captureSession.canAddOutput(stillImageOutput) {
            captureSession.addOutput(stillImageOutput)
        }

    }
    catch {
        print("error: \(error.localizedDescription)")
    }

    guard let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) else {
        print("no preview layer")
        return
    }

    self.view.layer.addSublayer(previewLayer)
    previewLayer.frame = self.view.layer.frame
    captureSession.startRunning()
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    captureSession.sessionPreset = AVCaptureSessionPresetHigh

    if let devices = AVCaptureDevice.devices() as? [AVCaptureDevice] {
        // Loop through all the capture devices on this phone
        for device in devices {
            // Make sure this particular device supports video
            if (device.hasMediaType(AVMediaTypeVideo)) {
                // Finally check the position and confirm we've got the back camera
                if(device.position == AVCaptureDevicePosition.back) {
                    captureDevice = device
                    if captureDevice != nil {
                        print("Capture device found")
                        beginSession()
                    }
                }
            }
        }
    }


} 

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}

`

1 个答案:

答案 0 :(得分:0)

1)要隐藏状态栏,您应该添加UIViewController override var prefersStatusBarHidden : Bool { return true } 方法的覆盖:

AVCaptureDevice

2)要设置常量FPS,您可以使用func setFrameRate(_ captureDevice: AVCaptureDevice) { do { try captureDevice.lockForConfiguration() captureDevice.activeVideoMinFrameDuration = CMTimeMake(1, 140) captureDevice.activeVideoMaxFrameDuration = CMTimeMake(1, 140) captureDevice.unlockForConfiguration() } catch { NSLog("An Error occurred: \(error.localizedDescription))") } } 实例的prefersStatusBarHidden:activeVideoMinFrameDuration属性:

AuthorizeAttribute