Macos QTCaptureDeviceWasConnectedNotification

Macos QTCaptureDeviceWasConnectedNotification,macos,webcam,nsnotifications,Macos,Webcam,Nsnotifications,我正在开发一个桌面应用程序,其中列出了连接到系统的网络摄像头。当用户选择网络摄像头应用程序时,从设备流至QTCaptureView。 我已注册到通知QTCaptureDeviceWasDisconnectedNotification和QTCaptureDeviceWasConnectedNotification,以便在设备断开和连接时删除设备并将其添加到列表中 问题在于,当设备连接时,QTCaptureDeviceWasConnectedNotification会发布两次。这是什么原因 另外,在

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

问题在于,当设备连接时,
QTCaptureDeviceWasConnectedNotification
会发布两次。这是什么原因

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

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

这是阻碍我了解情况的一般错误列表(可能会帮助您):

  • 使用带有内置麦克风的网络摄像头
  • 使用了[QTCaptureDevice inputDevices with MediaType:]而不是[QTCaptureDevice inputDevices]。这使我看不到连接的其他类型的设备(如麦克风)
  • 在我的测试中,当没有“视频”设备时,我什么也没有记录。这就是为什么我看到两个连接的通知(视频,视频+麦克风)和一个断开的通知(-麦克风,-视频)-一开始让我感到困惑
这里是我测试的日志

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

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"
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相机。第二项通知是:

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"
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摄像头和AppleusAudioEngine—麦克风

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

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,它还没有问题。

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

因此,我试图确定该条目是音频条目还是视频条目,以下是我的发现:

NSArray *inputDevices = [QTCaptureDevice inputDevices]; 
for(QTCaptureDevice *listDevice in inputDevices) {
    NSLog(@"%@",[[[device formatDescriptions] objectAtIndex:0] mediaType]);
}
以上输出“vide”或“soun”,这是QTMediaTypeVideo和QTMediaTypeSound的值。因此,如果您只想使用视频设备,可以检查上述值是否为QTMediaTypeVideo

不确定这是否有助于解决您的问题。

有相同的问题:)您解决了吗?