iOS:如何在AVCaptureSession上启用图像稳定?

4

我希望我的应用程序能够捕获稳定的图像,但是我还没有找到实现它所需的配置。

这是我的代码:

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 ")
    }
}

会话预设已经正确设置,但是不支持图像稳定。

我该怎么做来支持图像稳定?


** 在RHYTHMIC FISTMAN回答后的第二次尝试: **

我切换到了后置摄像头,在设置之前将输出添加到捕获会话中,但仍无法使图像稳定:

    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个回答

2
首先,您忘记将AVCaptureStillImageOutput添加到AVCaptureSession中。在查询其功能之前,必须这样做!
captureSession.addOutput(stillImageOutput)

其次,前置摄像头不支持数字或光学图像稳定。
第三,在后置摄像头上,在支持的平台上(数字似乎在5S以上可用),AVCaptureStillImageOutput automaticallyEnablesStillImageStabilizationWhenAvailable默认为YES,因此如果您切换到后置摄像头,则已经使用某种形式的图像稳定。
注:仅6+和6S+支持光学图像稳定(尽管链接的技术说明尚未更新至6S型号)。

1
我按照你的建议去做了,但还是不起作用。(我修改了问题) - Cherif
我正在 iPhone 5 上运行它。 - Cherif
数字稳定功能适用于5S及以上版本。 - Rhythmic Fistman
这回答了你的问题吗? - Rhythmic Fistman
嗨,@RhythmicFistman,感谢您分享您的知识。您是否知道我们在这里相关问题的答案?https://dev59.com/RVsW5IYBdhLWcg3wfXX6。感谢您的时间! - Crashalot
我使用的是 iPhone 7,无论我尝试什么方法都无法激活稳定功能。 - user187676

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接