我正在尝试编写一个 Mac 应用程序,该应用程序可以从连接的 ipad 中捕获屏幕截图/视频,例如 quicktime 或 zoom can。我正在尝试使用AVCapturePhotoOutput
该类,但该func capturePhoto(with: AVCapturePhotoSettings, delegate: AVCapturePhotoCaptureDelegate)
方法没有调用我的委托的任何方法,但我没有看到任何其他错误。我是否设置AVCapturePhotoSettings
不正确,或者错过了设置捕获会话的步骤?
这是设置 aAVCaptureSession
并尝试调用的代码capturePhoto
:
let device : AVCaptureDevice = message.object as! AVCaptureDevice;
print(device.deviceType, " localized name: ", device.localizedName, " model id", device.modelID)
var session = AVCaptureSession();
let photoOutput = AVCapturePhotoOutput()
session.beginConfiguration()
guard session.canAddOutput(photoOutput) else { return }
session.sessionPreset = .photo
session.addOutput(photoOutput)
print("output added to session")
do {
try session.addInput(AVCaptureDeviceInput(device: device));
print("input added to session")
session.commitConfiguration();
session.startRunning();
print("session running")
let photoSettings = AVCapturePhotoSettings()
print("about to try to capture a photo with", device.localizedName)
photoOutput.capturePhoto(with: photoSettings, delegate: PhotoDelegate(theCV: self))
} catch {
print("couldn't add capture device as input")
}
}
这是我的委托,在我触发捕获后,这些方法都没有被调用。
class PhotoDelegate : NSObject, AVCapturePhotoCaptureDelegate{
var cv : ContentView
init(theCV : ContentView){
cv = theCV
print("delegate constructed")
}
func photoOutput(_ output: AVCapturePhotoOutput,
didFinishProcessingPhoto photo: AVCapturePhoto,
error: Error?){
print("got the ipad photo!")
print(photo.timestamp)
}
func photoOutput(_: AVCapturePhotoOutput, willBeginCaptureFor: AVCaptureResolvedPhotoSettings){
print("starting the capture")
}
func photoOutput(_: AVCapturePhotoOutput, didFinishCaptureFor: AVCaptureResolvedPhotoSettings, error: Error?){
print("did finish capture")
}
}
我看到的输出(从我读到的,错误是无关的日志垃圾邮件,但我不是专家)
AVCaptureDeviceType(_rawValue: AVCaptureDeviceTypeExternalUnknown) localized name: Ben’s iPad model id iOS Device
output added to session
input added to session
2022-01-07 20:48:26.165436-0700 presenterMode[65303:6394791] [] CMIOHardware.cpp:379:CMIOObjectGetPropertyData Error: 2003332927, failed
2022-01-07 20:48:26.165502-0700 presenterMode[65303:6394791] [] CMIO_DALA_Object.cpp:518:GetPropertyData Error: 2003332927, got an error getting the property data mObjectID 39
2022-01-07 20:48:26.168461-0700 presenterMode[65303:6394791] [] CMIOHardware.cpp:420:CMIOObjectSetPropertyData property isn't settable pft glob
2022-01-07 20:48:26.168546-0700 presenterMode[65303:6394791] [] CMIOHardware.cpp:450:CMIOObjectSetPropertyData Error: 1852797029, failed
2022-01-07 20:48:26.170321-0700 presenterMode[65303:6394791] [] CMIOHardware.cpp:379:CMIOObjectGetPropertyData Error: 2003332927, failed
2022-01-07 20:48:26.170527-0700 presenterMode[65303:6394791] [] CMIOHardware.cpp:379:CMIOObjectGetPropertyData Error: 2003332927, failed
2022-01-07 20:48:26.170552-0700 presenterMode[65303:6394791] [] CMIO_DALA_Object.cpp:518:GetPropertyData Error: 2003332927, got an error getting the property data mObjectID 39
session running
about to try to capture a photo with Ben’s iPad
delegate constructed