除非打开 Quicktime,否则 AVCaptureDevice.devices() 不会列出 iOS 设备

标签 ios swift avfoundation quicktime

我正在尝试在 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/

相关文章:

ios - 在 iOS 项目中使用开源 C 库 (GRIB API)

ios - 适用于 iOS 的 AWS DynamoDB 字符串属性返回 nil

ios - 在 Swift 中使用蓝牙耳机的麦克风和内置扬声器进行录音和播放

iphone - 如何同时对多个轨道(音频和视频)使用 AVAssetReader 和 AVAssetWriter?

iphone - 可以使用Watir在移动设备上自动化移动站点测试吗?

ios - objective-c : memory management with NSTimer objects

ios - 在纯编程的 swift ios 应用程序中创建和利用可重用组件的策略? (UIKit 不是 SwiftUI)

swift - 点击 TabBar 时更新当前 UIViewController UI

ios - 如何使用自动闪光模式检测闪光灯开/关?

ios - 在 NavigationController 中跳过登录 View Controller