2015-04-05 5 views
1

Цель состоит в том, чтобы просто отображать живые видеовходы с веб-камеры.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; 
    } 
} 

ответ

0

Решено:

я переехал [self initSession]; из - (void)viewDidLoad в - (void)viewDidLayout

Update: я столкнулся с большим количеством проблем позже с - (void)viewDidLayout, так что в итоге я переехал в - (void)viewDidAppear

Смежные вопросы