USB 摄像头后 AVCaptureDevice 列表不刷新 connected/disconnected
AVCaptureDevice list doesn't refresh after USB camera connected/disconnected
我有一个简单的 C 或 Objective-C 程序,它使用 AVFoundation 框架在 MacOS 上打印所有连接的视频设备。
当我断开连接或连接新的视频捕获设备列表时,直到我停止程序并再次 运行 它才会刷新。
我的代码如下所示:
#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 程序调用代码,但这是最小的重现代码,以查看问题出在哪里。
我总是打印相同的设备,直到我停止程序并再次启动它然后正确检测到新设备。
问题在哪里或者我错过了什么?
您需要运行一个事件循环。
AVFoundation 很可能只更新其设备列表以响应事件。您在此应用程序中调用 sleep() 。睡觉时,应用程序不会收到任何通知。所以设备数组在 sleep() 之前和之后将是相同的。
如果您使用的是 Apple 的 Foundation/AppKit/UIKit 框架,则需要以 Apple 的方式编写程序。这意味着使用 运行 循环和计时器,而不是 sleep();
我有一个简单的 C 或 Objective-C 程序,它使用 AVFoundation 框架在 MacOS 上打印所有连接的视频设备。 当我断开连接或连接新的视频捕获设备列表时,直到我停止程序并再次 运行 它才会刷新。
我的代码如下所示:
#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 程序调用代码,但这是最小的重现代码,以查看问题出在哪里。 我总是打印相同的设备,直到我停止程序并再次启动它然后正确检测到新设备。
问题在哪里或者我错过了什么?
您需要运行一个事件循环。
AVFoundation 很可能只更新其设备列表以响应事件。您在此应用程序中调用 sleep() 。睡觉时,应用程序不会收到任何通知。所以设备数组在 sleep() 之前和之后将是相同的。
如果您使用的是 Apple 的 Foundation/AppKit/UIKit 框架,则需要以 Apple 的方式编写程序。这意味着使用 运行 循环和计时器,而不是 sleep();