AVCaptureStillImageOutput

AVCaptureStillImageOutput

我正试图将相机 View 放入我的 View Controller 中。

我在顶部导入了AVFoundation以及UIImagePickerControllerDelegateUINavigationControllerDelegate类。

但是,每当我尝试使用AVCaptureStillImageOutput时,Xcode都会告诉我它已在iOS10中弃用,我应该使用AVCapturePhotoOutput。完全可以,但是,一旦我想调用stillImageOutput.outputSettings.outputSettings本身将不可用。因此,我必须使用AVAVCaptureStillImageOutput才能正常工作,但是我有多个警告,因为此功能在iOS10中已弃用。

我进行了搜索,但找不到真正的解决方案。我将衷心感谢您的帮助。我正在学习,所以任何解释都很好!代码如下。

import UIKit
import AVFoundation

class CameraView: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    var captureSession : AVCaptureSession?
    var stillImageOutput : AVCaptureStillImageOutput?
    var previewLayer : AVCaptureVideoPreviewLayer?

    @IBOutlet var cameraView: UIView!

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        captureSession = AVCaptureSession()
        captureSession?.sessionPreset = AVCaptureSessionPreset1920x1080

        var backCamera = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo)
        var error : NSError?

        do {
            var input = try! AVCaptureDeviceInput (device: backCamera)
            if (error == nil && captureSession?.canAddInput(input) != nil) {

                captureSession?.addInput(input)

                stillImageOutput = AVCaptureStillImageOutput()
                stillImageOutput?.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG]

                if (captureSession?.canAddOutput(stillImageOutput) != nil) {
                    captureSession?.addOutput(stillImageOutput)

                    previewLayer = AVCaptureVideoPreviewLayer (session: captureSession)
                    previewLayer?.videoGravity = AVLayerVideoGravityResizeAspect
                    previewLayer?.connection.videoOrientation = AVCaptureVideoOrientation.portrait
                    cameraView.layer.addSublayer(previewLayer!)
                    captureSession?.startRunning()
                }
            }
        } catch {

        }
    }
}

最佳答案

不推荐使用AVCaptureStillImageOutput意味着您可以在iOS 10中继续使用它,但是:

  • 苹果无法保证iOS 10可以使用多长时间。
  • 随着iOS 10及更高版本中添加了新的硬件和软件功能,您将无法访问所有功能。例如,您可以为宽颜色设置AVCaptureStillImageOutput,但是使用AVCapturePhotoOutput进行宽颜色设置要容易得多。对于RAW捕获或实时照片,AVCapturePhotoOutput是镇上唯一的游戏。

  • 如果您尽管不赞成而乐于继续,那么您的问题不是outputSettings被删除了,即it's still there

    对于Beta 6及更高版本,您需要注意一些事项(尽管事实证明这不是问题):在不带显式键和值类型的情况下使用NSDictionary的API会以[AnyHashable: Any]的形式传入Swift 3,而您可能会在其中使用Foundation或CoreFoundation类型。字典不再隐式地桥接到Swift类型。 (有些other questions about beta 6 dictionary conversions可能会将您指向正确的方向。)

    但是,设置outputSettings不会出现任何编译错误。无论是使用完整的代码,还是将其简化为该行的基本部分:
    var stillImageOutput : AVCaptureStillImageOutput?
    stillImageOutput = AVCaptureStillImageOutput()
    stillImageOutput?.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG]
    

    ...我唯一看到的警告是关于弃用。

    关于ios - Swift 3中的AVCaptureStillImageOutput与AVCapturePhotoOutput,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39173865/

    10-14 21:30