2010-10-26 14 views
7

¿Cómo puedo calcular el progreso de un proceso de AVAssetWriter? Así que si tengo algo como:¿Cómo puedo seguir el progreso de la escritura de AVAssetWriter?

[assetWriterInput requestMediaDataWhenReadyOnQueue:queue usingBlock:^{ 
    while (1){ 
    if ([assetWriterInput isReadyForMoreMediaData]) { 
     CMSampleBufferRef sampleBuffer = [audioMixOutput copyNextSampleBuffer]; 
     if (sampleBuffer) { 
     [assetWriterInput appendSampleBuffer:sampleBuffer]; 
     CFRelease(sampleBuffer); 
     } else { 
     [assetWriterInput markAsFinished]; 
     break; 
     } 
    } 
    } 
}]; 

lo que puedo estar tirando (o sondeo) durante el bucle de averiguar cuántas X de Y he terminado?

Gracias.

Respuesta

16

El buffer de muestra tiene varias marcas de tiempo en ellos. Se podría obtener el sello de tiempo de presentación con un llamado a:

CMTime presTime = CMSampleBufferGetPresentationTimeStamp(sampleBuffer); 

entonces se podría utilizar eso para determinar lo lejos que están en su origen para el buffer de entrada. presTime/duration debe darle un valor de 0.0 a 1.0 que representa el progreso aproximado. Si necesitara ser más preciso, podría tratar de factorizar la duración de las muestras en el buffer de muestra usando CMSampleBufferGetDuration().

Si el tiempo de presentación no funciona, mire las otras marcas de hora cercanas en el encabezado.

Cuestiones relacionadas