Возможно ли использовать AVFoundation и OpenCV внутри службы XPC? У меня есть такой простой кодXPC Service и AVFoundation
#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++;
}
}
, который работает по мере необходимости при запуске внутри обычного приложения какао. Он будет перечислять как камеры, так и FaceTime и USB.
Если я помещаю точно такой же код внутри моей службы XPC он будет висеть вечно на
m_vidCap.open(-1);
и никогда не будет выполняться дальше.
Я предполагаю, что есть некоторые ограничения в отношении того, что можно использовать внутри службы XPC, но я не мог ничего полезного Google. Любой вход очень ценится. Thx
Вы используете LaunchAgent или LaunchDaemon? Я решил аналогичную проблему в стандартном XPCService, используя ваш подход, но он работает только при работе с Xcode. При запуске приложения вне Xcode кажется, что подключение к службе завершается с ошибкой. –
в конце я дал использование службы XPC и OpenCV, все работало очень нестабильно, множество исключений, где они не могут просто произойти. После того, как я переместил весь код OpenCV в основное приложение, все работало безупречно. – Eugen