Copia profunda de audio CMSampleBuffer

Estoy tratando de crear una copia de un CMSampleBuffer devuelto por captureOutput en unAVCaptureAudioDataOutputSampleBufferDelegate.

El problema que tengo es que mis marcos provienen del método delegadocaptureOutput:didOutputSampleBuffer:fromConnection: ser dejado caer después de retenerlos enCFArray por un largo tiempo.

Obviamente, necesito crear copias profundas de los buffers entrantes para su posterior procesamiento. Yo tambien se queCMSampleBufferCreateCopy solo crea copias superficiales.

Hay pocas preguntas relacionadas que se hicieron en SO:

Extraer datos de un CMSampleBuffer para crear una copia profundaCrear una copia de CMSampleBuffer en Swift devuelve OSStatus -12743 (Formato de medios no válido)Copia profunda de CMImageBuffer o CVImageBuffer

Pero ninguno de ellos me ayuda a usar correctamenteCMSampleBufferCreate función con 12 parámetros:

  CMSampleBufferRef copyBuffer;

  CMBlockBufferRef data = CMSampleBufferGetDataBuffer(sampleBuffer);
  CMFormatDescriptionRef formatDescription = CMSampleBufferGetFormatDescription(sampleBuffer);
  CMItemCount itemCount = CMSampleBufferGetNumSamples(sampleBuffer);

  CMTime duration = CMSampleBufferGetDuration(sampleBuffer);
  CMTime presentationStamp = CMSampleBufferGetPresentationTimeStamp(sampleBuffer);
  CMSampleTimingInfo timingInfo;
  timingInfo.duration = duration;
  timingInfo.presentationTimeStamp = presentationStamp;
  timingInfo.decodeTimeStamp = CMSampleBufferGetDecodeTimeStamp(sampleBuffer);


  size_t sampleSize = CMBlockBufferGetDataLength(data);
  CMBlockBufferRef sampleData;

  if (CMBlockBufferCopyDataBytes(data, 0, sampleSize, &sampleData) != kCMBlockBufferNoErr) {
    VLog(@"error during copying sample buffer");
  }

  // Here I tried data and sampleData CMBlockBuffer instance, but no success
  OSStatus status = CMSampleBufferCreate(kCFAllocatorDefault, data, isDataReady, nil, nil, formatDescription, itemCount, 1, &timingInfo, 1, &sampleSize, &copyBuffer);

  if (!self.sampleBufferArray)  {
    self.sampleBufferArray = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks);
    //EXC_BAD_ACCESS crash when trying to add sampleBuffer to the array
    CFArrayAppendValue(self.sampleBufferArray, copyBuffer);
  } else  {
    CFArrayAppendValue(self.sampleBufferArray, copyBuffer);
  }

¿Cómo se copia en profundidad Audio CMSampleBuffer? Siéntase libre de usar cualquier lenguaje (rápido / objetivo-c) en sus respuestas.

Respuestas a la pregunta(1)

Su respuesta a la pregunta