Цель состоит в том, чтобы просто отображать живые видеовходы с веб-камеры.AVCaptureVideoPreviewLayer не отображается
Код перегоняется из одного из примеров Apple и, по-видимому, работает, по меньшей мере, частично, поскольку светодиод рядом с камерой загорается при запуске.
I ctrl-перетаскивается из представления в раскадровке в свойство розетки в интерфейсе, и теперь он подключается как ссылка на выход, но ничего не отображается, даже черный цвет фона не установлен.
Любая идея, где я ошибаюсь?
Спасибо за вашу помощь
Edit: На самом деле он работает так же, как ожидается, если я поставил точку останова на [previewViewLayer addSublayer:self.previewLayer];
линии и продолжают работать в отладчике. Должен быть какой-то вопрос времени.
Интерфейс:
@property (retain) AVCaptureDevice *videoDevice;
@property (retain) AVCaptureDeviceInput *videoDeviceInput;
@property (retain) AVCaptureSession *session;
@property (retain) AVCaptureVideoPreviewLayer *previewLayer;
@property (assign) IBOutlet NSView *previewView;
Реализация:
- (void)viewDidLoad {
[super viewDidLoad];
[self getDevice];
[self initSession];
}
- (void)initSession {
// Create a capture session
// self.session = [[AVCaptureSession alloc] init];
[self setSession:[[AVCaptureSession alloc] init]];
// Attach preview to session
CALayer *previewViewLayer = [self.previewView layer];
[previewViewLayer setBackgroundColor:CGColorGetConstantColor(kCGColorBlack)];
self.previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.session];
[self.previewLayer setFrame:[previewViewLayer bounds]];
[self.previewLayer setAutoresizingMask:kCALayerWidthSizable | kCALayerHeightSizable];
[previewViewLayer addSublayer:self.previewLayer];
// Start the session
[self.session startRunning];
// Create a device input for the device and add it to the session
NSError *error = nil;
AVCaptureDeviceInput *newVideoDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:self.videoDevice error:&error];
[self.session addInput:newVideoDeviceInput];
self.videoDeviceInput = newVideoDeviceInput;
[self.session commitConfiguration];
}
- (void)getDevice {
NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
for (AVCaptureDevice *device in devices) {
NSLog(@"Device name: %@", [device localizedName]);
self.videoDevice = device;
}
}