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, если вы просто хотите работать с видеоустройством.
Не уверен, поможет ли это вашей проблеме.