Среда AVFoundation занимает около 250-300 мс для доставки буферов в CaptureOutput.Добавление задержки при рендеринге - PullRequest
0 голосов
/ 11 декабря 2018

Я использую фреймворк AVFoundation для захвата экрана.Я зарегистрировал очередь вот так

*dispatch_sync (mainQueue, ^{
    BOOL ret;
    if (captureScreen)
      ret = [self openScreenInput];
    else
      ret = [self openDeviceInput];
    if (!ret)
      return;
    output = [[AVCaptureVideoDataOutput alloc] init];
    [output setSampleBufferDelegate:self
                              queue:workerQueue];
    output.alwaysDiscardsLateVideoFrames = YES;
    output.videoSettings = nil; /* device native format */
    session = [[AVCaptureSession alloc] init];
    [session addInput:input];
    [session addOutput:output];
    *successPtr = YES;
  });*

Как только она захватит буферы, они будут доставлены в workerQueue.В коде CaptureOutput -

*- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
       fromConnection:(AVCaptureConnection *)connection
{
    GstClockTime timestamp, duration;
  [bufQueueLock lock];
  if (stopRequest) {
    [bufQueueLock unlock];
    return;
 }
 if ([bufQueue count] == BUFFER_QUEUE_SIZE)
  {
    [bufQueue removeLastObject];
  }
  [bufQueue insertObject:(__bridge id)sampleBuffer
                 atIndex:0];
  [bufQueueLock unlockWithCondition:HAS_BUFFER_OR_STOP_REQUEST];
}*

Но при рендеринге доставленных буферов я получаю задержку около 250-300 мс. Это слишком просто из-за Grabber.Если у кого-то есть решение, пожалуйста, опубликуйте его.Заранее спасибо

...