我正在尝试使用 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 的视频连接。
[<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)
最佳答案
好的,我解决了我的问题。帮助别人的锄头。所以问题就在这里:
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}
关于ios - Swift:找不到 AVCaptureStillImageOutput 的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27473531/