AVCaptureDevice isInUseByAnotherApplication всегда возвращает false

Я делаю базовое приложение на Objective-C и платформе AVFoundation, я хочу определить, используется ли встроенная камера для Mac другим приложением, мне удалось это сделать, но оно всегда возвращает false, даже когда я использование камеры с другим программным обеспечением.

У меня есть функция, которая оборачивает этот код и выполняется каждые 2 секунды:

NSArray *devices =  [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
    for(AVCaptureDevice *camera in devices){
        NSLog([camera isInUseByAnotherApplication] ? @"YES DEVICE BEING USED": @"DEVICE NOT BEING USED");
        NSLog([camera isSuspended] ? @"YES DEVICE SUSPENDED": @"DEVICE NOT suspended");
        NSLog([camera manufacturer]);
        NSLog([camera localizedName]);

    }

Проблема в том, что я всегда получаю один и тот же результат:

2017-01-06 13:02:24.657 Befective Agent[13749:175226] DEVICE NOT BEING USED
2017-01-06 13:02:24.658 Befective Agent[13749:175226] DEVICE NOT suspended
2017-01-06 13:02:24.658 Befective Agent[13749:175226] Apple Inc.
2017-01-06 13:02:24.658 Befective Agent[13749:175226] FaceTime HD Camera (Built-in)

ИЗМЕНИТЬ

Камера, которая отображается в программном обеспечении, такая же, как и эта, и у меня есть только встроенная камера MacBook Pro.

Заранее спасибо!

ИЗМЕНИТЬ

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

  • Видеовстречи
  • Скайп
  • Красная будка
  • Слабый

person Victor Castillo Torres    schedule 06.01.2017    source источник


Ответы (1)


Как указано в приведенной ниже ссылке, он вернет значение true, только если какое-либо другое приложение использует исключительно камеру:

https://developer.apple.com/reference/avfoundation/avcapturedevice/1389512-isinusebyanotherapplication

И эта эксклюзивная блокировка получается, как показано ниже:

https://developer.apple.com/reference/avfoundation/avcapturedevice/1387810-lockforconfiguration

Уточнение: ключевое слово эксклюзивный. Камеру можно исключительно заблокировать только через lockForConfiguration, и это временно. Таким образом, несколько приложений могут использовать камеру одновременно.

person Vikas Dadheech    schedule 09.01.2017
comment
На самом деле, когда я тестирую свой код, я использую камеру с одним из программ, которые я упомянул в вопросе. - person Victor Castillo Torres; 09.01.2017
comment
Использование этих программ не означает, что они используют исключительно камеру. Например, когда вы используете видеовстречи, вы все равно сможете использовать Skype, показывая, что видеовстреча или Skype не используют камеру ИСКЛЮЧИТЕЛЬНО. - person Vikas Dadheech; 11.01.2017
comment
Это многое объясняет, значит, есть другой способ определить, используется ли камера? - person Victor Castillo Torres; 11.01.2017
comment
Можете ли вы предоставить сценарий, зачем вам это нужно? Потому что, поскольку все приложения могут использовать камеру одновременно, вы также можете получить доступ к камере и выполнять свои операции. Или, кроме того, вы можете приобрести эксклюзивную блокировку для выполнения ваших операций. - person Vikas Dadheech; 12.01.2017
comment
Мы делаем программное обеспечение, которое определяет, когда используется приложение, и определяет, используется ли камера. - person Victor Castillo Torres; 16.01.2017
comment
@VictorCastilloTorres, вы когда-нибудь находили решение для определения того, использовалось ли оно, но не обязательно исключительно? У меня возникла потребность в проекте, и я был разочарован ... подумал, что я попал в точку, когда увидел, что поле isInUseByAnotherApplication - person afreeland; 26.10.2020
comment
@afreeland Нет, я давно ушел из этой компании - person Victor Castillo Torres; 28.10.2020