QTCaptureDeviceWasConnectedNotification

Я разрабатываю приложение для рабочего стола, в котором перечислены веб-камеры, подключенные к системе. Когда пользователь выбирает потоковое приложение веб-камеры с устройства в QTCaptureView. Я зарегистрировался на уведомление QTCaptureDeviceWasDisconnectedNotification а также QTCaptureDeviceWasConnectedNotification так что я удаляю и добавляю устройство в список всякий раз, когда устройство отключено и подключено.

Проблема в том, что QTCaptureDeviceWasConnectedNotification публикуется дважды при подключении устройства. Что является причиной этого?

Кроме того, в одной из моих Mac Book я часто получаю следующую проблему. Устройство, полученное из 2-го уведомления QTCaptureDeviceWasConnectedNotification (я получаю два уведомления), не имеет локализованного имени описания. Не могли бы вы сказать мне, что могло пойти не так?

2 ответа

Решение

У меня такая же проблема. Причиной такого интересного поведения в моем случае стала веб-камера со встроенным микрофоном. Таким образом, при подключении такого многоцелевого устройства будет два уведомления - одно для устройства видеозахвата и второе для встроенного микрофона.

Это список моих общих ошибок, которые не позволили мне понять ситуацию (возможно, помогут вам):

  • Использовалась веб-камера со встроенным микрофоном
  • Использовалось [QTCaptureDevice inputDevicesWithMediaType:] вместо [QTCaptureDevice inputDevices]. Это мешало мне видеть подключенные другие типы устройств (например, микрофон)
  • В моем тесте я ничего не регистрировал, когда нет "видео" устройств. Вот почему я увидел два подключенных уведомления (видео, видео + микрофон) и только одно отключенное (-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 - проблем с ним пока не было.

У меня была такая же проблема, поэтому я немного покопался, и, похоже, это связано с устройством, которое содержит аудио и видео.

Поэтому я попытался определить, была ли запись аудио или видео, вот что я нашел:

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

Выше приведены результаты "vide" или "soun", которые являются значениями для QTMediaTypeVideo и QTMediaTypeSound. Таким образом, вы можете проверить, является ли указанное выше значение QTMediaTypeVideo, если вы просто хотите работать с видеоустройством.

Не уверен, поможет ли это вашей проблеме.

Другие вопросы по тегам