XPC 서비스 내에서 AVFoundation 및 OpenCV를 사용할 수 있습니까? 나는 그런 간단한 코드를 가지고XPC 서비스 및 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 하나를 열거합니다.
나는
m_vidCap.open(-1);
에서 영원히 중단됩니다 추가 실행되지 않습니다 내 XPC 서비스 내에서 똑같은 코드를 삽입합니다.
XPC 서비스 내에서 사용할 수있는 것에 대한 제한이 있다고 가정하고 있지만 Google에서 유용하지는 않습니다. 모든 의견을 보내 주시면 감사하겠습니다. Thx
LaunchAgent 또는 LaunchDaemon을 사용하고 있습니까? 당신의 접근 방식을 사용하여 표준 XPCService에서 유사한 문제를 해결했지만 Xcode에서 실행될 때만 작동합니다. Xcode 외부에서 응용 프로그램을 시작하면 서비스에 연결하지 못하는 것 같습니다. –
마지막에 XPC 서비스와 OpenCV를 사용하여 모든 것이 매우 불안정하고 많은 예외가 발생했습니다. 모든 OpenCV 코드를 기본 응용 프로그램으로 옮긴 후 모두 완벽하게 작동했습니다. – Eugen