У меня есть простая программа C или Objective-C, которая печатает все подключенные видеоустройства в MacOS с использованием фреймворка AVFoundation. Когда я отключаю или подключаю новое устройство видеозахвата, список не обновляется, пока я не остановлю программу и не запущу ее снова.
Мой код выглядит следующим образом:
#import <AVFoundation/AVFoundation.h>
#include <stdio.h>
void print_devices() {
NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
for (AVCaptureDevice *device in devices) {
const char *name = [[device localizedName] UTF8String];
fprintf(stderr, "Device: %s\n", name);
}
}
int main() {
print_devices();
sleep(10);
// I connect or disconnect new capture device here via USB
print_devices();
// second print_devices(); displays exact same devices
// as first call to this function.
return 0;
}
Моя реальная программа выглядит немного иначе, и я вызываю код из программы Go, но это минимальный код воспроизведения, чтобы увидеть, в чем проблема. Я всегда печатаю одни и те же устройства, пока не остановлю программу и не запущу ее снова, тогда новые устройства будут обнаружены правильно.
Где подвох или что мне здесь не хватает?