iOS:如何在 AVCaptureSession 上激活图像稳定功能?

Posted

技术标签:

【中文标题】iOS:如何在 AVCaptureSession 上激活图像稳定功能?【英文标题】:iOS : How to activate image stabilization on an AVCaptureSession? 【发布时间】:2015-10-07 13:34:00 【问题描述】:

我想在我的应用中捕获稳定的图像,但我没有找到实现它所需的配置。

这是我的代码:

let frontCamera = cameraWithPosition(AVCaptureDevicePosition.Front)

let captureSession = AVCaptureSession()

if captureSession.canSetSessionPreset(AVCaptureSessionPresetPhoto) 
    captureSession.sessionPreset =  AVCaptureSessionPresetPhoto 
    print("Session preset has been set ")

else 
    print("Session preset couldn't be set ")


var error: NSError?
var input: AVCaptureDeviceInput!
do 
    input = try AVCaptureDeviceInput(device: frontCamera)
 catch let error1 as NSError 
    error = error1
    input = nil


if error == nil && captureSession!.canAddInput(input) 
    captureSession.addInput(input)
    let stillImageOutput = AVCaptureStillImageOutput()
    stillImageOutput.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG]
    if stillImageOutput.stillImageStabilizationSupported 
        stillImageOutput.automaticallyEnablesStillImageStabilizationWhenAvailable = true
        print("Stabilization supported ")
    
    else 
        print("Stabilization is not supported ")
    

因此会话预设设置正确,但不支持图像稳定。

我可以做些什么来支持图像稳定?


** 节奏拳手反应后的第二次尝试: **

我切换到后置摄像头,我在设置之前已经将输出添加到 captureSession,但我的图像仍然没有稳定:

    let backCamera = cameraWithPosition(AVCaptureDevicePosition.Back)

    let captureSession = AVCaptureSession()

    if captureSession.canSetSessionPreset(AVCaptureSessionPresetPhoto) 
        captureSession.sessionPreset =  AVCaptureSessionPresetPhoto 
        print("Session preset has been set ")
    
    else 
        print("Session preset couldn't be set ")
    


    var error: NSError?
    var input: AVCaptureDeviceInput!
    do 
        input = try AVCaptureDeviceInput(device: backCamera)
     catch let error1 as NSError 
        error = error1
        input = nil
    

    if error == nil && captureSession.canAddInput(input) 
        captureSession.addInput(input)
        let stillImageOutput = AVCaptureStillImageOutput()
        stillImageOutput.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG]


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

            if stillImageOutput.stillImageStabilizationSupported == true 
                stillImageOutput.automaticallyEnablesStillImageStabilizationWhenAvailable = true
                print("Stabilization supported ")
            
            else 
                print("Stabilization is not supported ")
            

            if stillImageOutput.stillImageStabilizationActive == true 
                print("Stabilization is active ")
            
            else 
                print("Stabilization is not active ")
            
        
    

结果是: 不支持稳定 稳定未激活

【问题讨论】:

【参考方案1】:

首先,您忘记将您的AVCaptureStillImageOutput 添加到AVCaptureSession。在查询其功能之前,您必须这样做!

captureSession.addOutput(stillImageOutput)

其次,neither Digital nor Optical Image Stabilisation are supported on the front camera。

第三,在后置摄像头上,在支持的平台上(数字似乎在 5S 以上可用)AVCaptureStillImageOutput automaticallyEnablesStillImageStabilizationWhenAvailable 默认为 YES,所以如果你切换到后置摄像头 - 那么你已经会 em> 正在使用某种形式的图像稳定。

注意:光学图像稳定is only available on the 6+ and 6S+(尽管链接的技术说明尚未针对 6S 型号更新)。

【讨论】:

我遵循了您的建议,但仍然无法正常工作。 (我编辑了问题) 我在 iPhone 5 上运行它 5S及以上可使用数字稳定 这回答了你的问题吗? 嗨@RhythmicFistman 感谢您分享您的知识。你碰巧在这里知道我们相关问题的答案吗? ***.com/questions/34912050/…。感谢您的宝贵时间!

以上是关于iOS:如何在 AVCaptureSession 上激活图像稳定功能?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 相机 AVCaptureSession 在纵向与横向大小或分辨率

AVCaptureSession addInput:不适用于 iOS7

iOS:AVCaptureSession 不会录制超过 11 秒的音频 [重复]

当发生 AVCaptureSessionInterruptionReasonAudioDeviceInUseByAnotherClient 时 AVCaptureSession 不在 ios 中录制视

iOS使用AVCaptureSession自定义相机

iOS使用AVCaptureSession自定义相机