#iphone #audio-recording
#iPhone #аудиозапись
Вопрос:
Есть ли в любом случае возможность обратного вызова ОС для делегата
- (void) captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)psampleBuffer fromConnection:(AVCaptureConnection *)pconnection
в фоновом потоке вместо основного потока? Проблема в том, что время, затрачиваемое на копирование данных, влияет на пользовательский интерфейс. Похоже, это должно быть сделано в основном потоке, поскольку captureOutput, похоже, исчез, если вы пытаетесь скопировать его в фоновый поток и т.д… Я что-то здесь упускаю?
CMFormatDescriptionRef format;
format = CMSampleBufferGetFormatDescription(sampleBuffer);
bufSize = CMSampleBufferGetNumSamples(sampleBuffer);
sampleSize = CMSampleBufferGetSampleSize(sampleBuffer,0);
sampleLength = CMSampleBufferGetTotalSampleSize(sampleBuffer);
blockbuff = CMSampleBufferGetDataBuffer(sampleBuffer);
CMBlockBufferCopyDataBytes(blockbuff, 0, tocopy*_depth, buffInUse (offset*2));
Ответ №1:
Я использую функции CVPixelBuffer для блокировки / разблокировки буфера и получения информации о формате изображения. Я использую memcpy для копирования данных (пока буфер заблокирован) и вызываю performSelectorInBackground для обработки данных.
Комментарии:
1. Оказывается, задержка, которую я наблюдал, была вызвана @syncronized (self), который я каким-то образом кодирую из другого кода. Изменение этого значения на @synchronized(s), где s — NSString *, решило проблему задержки. Не уверен, почему это так, но к вашему сведению
Ответ №2:
Для хорошего ответа, похоже, это позволяет определить местоположение для исправления потока обратного вызова
[audioOutput setSampleBufferDelegate:self queue:dispatch_get_main_queue()];
Просто нужно изменить очередь.
Комментарии:
1. вы что-то пропустили, вы хотите, чтобы обратный вызов вызывался в фоновом потоке, но затем вы используете основную очередь?
2. Так давно, просто не помню деталей. Это была проблема с производительностью пользовательского интерфейса. Я думаю, что у меня это было в качестве примера того, как изменить, если потребуется.