【问题标题】:Swift: failure to find connection for AVCaptureStillImageOutputSwift:找不到 AVCaptureStillImageOutput 的连接
【发布时间】:2014-12-14 20:10:10
【问题描述】:

我正在尝试使用 AVFoundation 拍照。当我将 obj-c 代码翻译为 swift 以执行该操作时,我的程序在运行我尝试查找 videoConnection 的部分时卡住了。有什么线索吗?

let captureSesion = AVCaptureSession()
var captureDevice : AVCaptureDevice?
let stillImageOutput = AVCaptureStillImageOutput()

captureSesion.sessionPreset = AVCaptureSessionPresetPhoto
    let devices = AVCaptureDevice.devices()
    println(devices)
    for device in devices{
        if device.hasMediaType(AVMediaTypeVideo){
            if device.position == AVCaptureDevicePosition.Back{
                captureDevice = device as? AVCaptureDevice
            }
        }
    }
    if captureDevice != nil{
        var err : NSError? = nil
        captureSesion.addInput(AVCaptureDeviceInput(device: captureDevice, error: &err))

        //preview 
        var previewLayer = AVCaptureVideoPreviewLayer(session: captureSesion)
        self.view.layer.addSublayer(previewLayer)
        previewLayer?.frame = self.view.layer.frame

        var outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG]
        stillImageOutput.outputSettings = outputSettings
        captureSesion.addOutput(stillImageOutput)         
        captureSesion.startRunning()

        //take photo
        var videoConnection : AVCaptureConnection?
        //only have one conniption and debug get stuck here!!
        for connection in self.stillImageOutput.connections{
            for port in connection.inputPorts!{
                if port.mediaType == AVMediaTypeVideo{
                    videoConnection = connection as? AVCaptureConnection
                    break //for ports
                }
            }
            if videoConnection != nil{
                break //for connections
            }
        }
        //Take a photo and show
    }
    }

我成功获取了设备和实时预览,但我无法获取 stillImageOutput 的 videoConnection。

[<AVCaptureFigVideoDevice: 0x14d4c660 [Back Camera][com.apple.avfoundation.avcapturedevice.built-in_video:0]>, <AVCaptureFigVideoDevice: 0x14e904d0 [Front Camera][com.apple.avfoundation.avcapturedevice.built-in_video:1]>, <AVCaptureFigAudioDevice: 0x14e8a6d0 [iPod Microphone][com.apple.avfoundation.avcapturedevice.built-in_audio:0]>]

添加了 stilImageOutput 寻找联系 1 (lldb)

【问题讨论】:

    标签: ios objective-c ios7 swift


    【解决方案1】:

    好的,我解决了我的问题。帮助别人的锄头。所以这里的问题:

    var videoConnection : AVCaptureConnection?
        //only have one conniption and debug get stuck here!!
        for connection in self.stillImageOutput.connections{
            for port in connection.inputPorts!{
                if port.mediaType == AVMediaTypeVideo{
                    videoConnection = connection as? AVCaptureConnection
                    break //for ports
                }
            }
            if videoConnection != nil{
                break //for connections
            }
        }//take a photo then
    

    那段代码是我如何将它的 Objective-c 版本翻译成 swift 的。我在网上找到了类似的尝试。然而,很快,一切都变得容易得多(但并不明显)。所以这一行解决了这个问题:

    if let videoConnection = stillImageOuput.connectionWithMediaType(AVMediaTypeVideo){//take a photo here}
    

    【讨论】:

      猜你喜欢
      • 2017-01-03
      • 1970-01-01
      • 2016-07-13
      • 1970-01-01
      • 2015-07-18
      • 1970-01-01
      • 1970-01-01
      • 2016-03-11
      • 2015-01-24
      相关资源
      最近更新 更多