gpt4 book ai didi

macos - XPC 服务和 AVFoundation

转载 作者:行者123 更新时间:2023-12-03 17:50:40 26 4
gpt4 key购买 nike

是否可以在 XPC 服务中使用 AVFoundation 和 OpenCV?我有这么简单的代码

#include <opencv2/opencv.hpp>
#import <AVFoundation/AVFoundation.h>

@interface AppDelegate(){
cv::VideoCapture m_vidCap;
}

...

//Hacky way of forcing OpenCV to call AVFoundation for the first time
//before the camera arrives
//OpenCV should add a better way of mapping camera indexes to cameras
//This way we force that devices are enumerated in the same order here
//and in their code
m_vidCap.open(-1);
m_vidCap.release();
[AVCaptureDevice devices]; //Force avfoundation "startup"
@autoreleasepool {
std::vector<std::wstring> devices;
// chosen device.
NSArray *osDevices=[AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding ( kCFStringEncodingUTF32LE );
AVCaptureDevice *device;
int did=0;
for(device in osDevices) {
NSString *deviceName=[device localizedName];
NSData* wstrdata = [deviceName dataUsingEncoding : encoding ];
std::wstring cppDeviceName=std::wstring((wchar_t*) [ wstrdata bytes ], [ wstrdata length] / sizeof ( wchar_t ) );
devices.push_back(cppDeviceName);
//NSLog("Device %d: %S at position %ld",did,cppDeviceName.c_str(),device.position);
did++;
}
}

当在常规 Cocoa 应用程序中启动时,它可以根据需要工作。它将枚举两个摄像头:FaceTime 摄像头和 USB 摄像头。

如果我将完全相同的代码放入我的 XPC 服务中,它将永远卡在

m_vidCap.open(-1);

并且永远不会进一步执行。

我假设 XPC 服务中可以使用的内容存在一些限制,但我无法通过 google 搜索任何有用的内容。任何意见都非常感谢。谢谢

最佳答案

你就快到了!我认为 AVFoundation 需要使用 NSRunLoop,但 XPC 服务默认使用 dispatch_main。您需要向由 XPC 服务的 info.plist 文件中的 XPCService 键标识的字典值添加一个键。默认情况下,它应该有一个 ServiceType 键。添加 RunLoopType 键,并为其指定字符串值 NSRunLoop

有关详细信息,请参阅 Creating XPC services .

关于macos - XPC 服务和 AVFoundation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28314877/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com