首页 文章

QTCaptureDeviceWasConnectedNotification

提问于
浏览
3

我正在开发一个桌面应用程序,列出连接到系统的网络摄像头 . 当用户从设备选择web-cam应用程序流到QTCaptureView时 . 我已注册通知 QTCaptureDeviceWasDisconnectedNotificationQTCaptureDeviceWasConnectedNotification ,以便在设备断开连接时将设备删除并添加到列表中 .

问题是 QTCaptureDeviceWasConnectedNotification 在连接设备时发布两次 . 这是什么原因?

另外,在我的一本Mac Book中,我经常遇到以下问题 . 从QTCaptureDeviceWasConnectedNotification第二次通知(我得到两个通知)获得的设备没有本地化的描述名称 . 你能告诉我这里可能出了什么问题吗?

2 回答

  • 1

    我有同样的问题 . 在我的案例中,这种有趣行为的原因是内置麦克风的网络摄像头 . 因此,当连接这样的多用途设备时,将有两个通知 - 一个用于视频捕获设备,另一个用于内置麦克风 .

    这是我的一般错误列表阻止我理解情况(可能会帮助你):

    • 用过内置麦克风的摄像头

    • 使用了[QTCaptureDevice inputDevicesWithMediaType:]而不是[QTCaptureDevice inputDevices] . 这阻止我看到附加的其他类型的设备(如麦克风)

    • 在我的测试中,当没有"video"设备时我没有记录任何内容 . 这就是我看到两个连接通知(视频,视频麦克风)和只有一个断开连接(-mic,-video)的原因 - 一开始让我很困惑 .

    这里记录了我的测试 .

    在设备附加上,第一个通知是:

    Device++ #0: "AppleHDAEngineInput:1B,0,1,1:4" - "AppleHDA:12"
    Device++ #1: "AppleHDAEngineInput:1B,0,1,0:3" - "AppleHDA:12"
    Device++ #2: "0xfd100000046d0990" - "UVC Camera VendorID_1133 ProductID_2448"
    

    你可以单独看到UVC相机 . 第二个通知是:

    Device++ #0: "AppleHDAEngineInput:1B,0,1,1:4" - "AppleHDA:12"
    Device++ #1: "AppleUSBAudioEngine:Unknown Manufacturer:Logitech Camera:5895DC4F:3" - "AppleUSBAudioDevice:Logitech Camera"
    Device++ #2: "AppleHDAEngineInput:1B,0,1,0:3" - "AppleHDA:12"
    Device++ #3: "0xfd100000046d0990" - "UVC Camera VendorID_1133 ProductID_2448"
    

    您可以看到UVC摄像头和AppleUSBAudioEngine - 麦克风 .

    在设备分离时,还会有两个通知 . 第一:

    Device-- #0: "AppleHDAEngineInput:1B,0,1,1:4" - "AppleHDA:12"
    Device-- #1: "AppleHDAEngineInput:1B,0,1,0:3" - "AppleHDA:12"
    Device-- #2: "0xfd100000046d0990" - "UVC Camera VendorID_1133 ProductID_2448"
    

    没有麦克风,UVC相机仍然存在 . 第二次通知:

    Device-- #0: "AppleHDAEngineInput:1B,0,1,1:4" - "AppleHDA:12"
    Device-- #1: "AppleHDAEngineInput:1B,0,1,0:3" - "AppleHDA:12"
    

    没有UVC相机,没有麦克风 .

    此外,QTKit可能会“合并”通知,因为有时我只收到一个通知(一个用于连接,一个用于断开连接),因此实际通知数量不仅取决于连接或断开的(子)设备数量 .

    对于localizedDisplayName - 它没有问题 .

  • 1

    我有同样的问题,所以我做了一些挖掘,实际上它似乎与包含音频和视频的设备有关 .

    所以我试着确定条目是音频条目还是视频条目,这是我发现的:

    NSArray *inputDevices = [QTCaptureDevice inputDevices]; 
    for(QTCaptureDevice *listDevice in inputDevices) {
        NSLog(@"%@",[[[device formatDescriptions] objectAtIndex:0] mediaType]);
    }
    

    以上输出“vide”或“soun”,它们是QTMediaTypeVideo和QTMediaTypeSound的值 . 因此,如果您只想使用视频设备,可以检查上述值是否为QTMediaTypeVideo .

    不确定它是否有助于解决您的问题 .

相关问题