我正在尝试在 Swift Playground 中使用 AVCaptureDevice.devices()
列出连接到我的计算机的设备。
import Cocoa
import Foundation
import AVFoundation
import CoreMediaIO
var prop = CMIOObjectPropertyAddress(
mSelector: CMIOObjectPropertySelector(kCMIOHardwarePropertyAllowScreenCaptureDevices),
mScope: CMIOObjectPropertyScope(kCMIOObjectPropertyScopeGlobal),
mElement: CMIOObjectPropertyElement(kCMIOObjectPropertyElementMaster))
var allow : UInt32 = 1
let dataSize : UInt32 = 4
let zero : UInt32 = 0
CMIOObjectSetPropertyData(CMIOObjectID(kCMIOObjectSystemObject), &prop, zero, nil, dataSize, &allow)
var session = AVCaptureSession()
session.sessionPreset = AVCaptureSession.Preset.low
let devices = AVCaptureDevice.devices()
for device in devices {
let deviceID = device.uniqueID
let deviceName = device.localizedName
print("\(deviceID): \(deviceName)")
}
即使我的 iPhone 连接到我的计算机,这也会给出以下结果
04-52-c7-c1-65-c4:input: Bose Tito
AppleHDAEngineInput:1B,0,1,0:1: Built-in Microphone
CC26311ECFEG1HNBA: FaceTime HD Camera
现在我注意到,如果我启动 Quicktime Player,选择“新电影录制”并选择我的设备作为相机源,则会列出我的设备
04-52-c7-c1-65-c4:input: Bose Tito
AppleHDAEngineInput:1B,0,1,0:1: Built-in Microphone
CC26311ECFEG1HNBA: FaceTime HD Camera
12345b7406eeb053e2d5cded2527315d6110a16e: tito
有什么办法可以防止这种情况发生吗?
最佳答案
您需要稍等一下设备才会出现。
注册AVCaptureDeviceWasConnectedNotification
,一旦可用即可收到通知。
关于除非打开 Quicktime,否则 AVCaptureDevice.devices() 不会列出 iOS 设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48646470/