Я использую фреймворк 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.Если у кого-то есть решение, пожалуйста, опубликуйте его.Заранее спасибо