2010-10-26 35 views
7

Comment puis-je calculer la progression d'un processus AVAssetWriter? Donc, si j'ai quelque chose comme:Comment puis-je suivre la progression de l'écriture d'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; 
     } 
    } 
    } 
}]; 

ce que je peux être tirais (ou vote) au cours de la boucle pour déterminer combien x de y que j'ai terminé?

Merci.

Répondre

16

La mémoire tampon d'échantillonnage comporte plusieurs horodatages. Vous pouvez obtenir l'horodatage de présentation avec un appel à:

CMTime presTime = CMSampleBufferGetPresentationTimeStamp(sampleBuffer); 

Vous pouvez ensuite utiliser pour déterminer dans quelle mesure vous êtes dans votre source pour le tampon d'entrée. presTime/durée devrait vous donner une valeur de 0.0 à 1.0 représentant la progression approximative. Si vous deviez être plus précis, vous pourriez essayer de prendre en compte la durée des échantillons dans le tampon d'échantillon en utilisant CMSampleBufferGetDuration().

Si l'heure de la présentation ne fonctionne pas, regardez les autres horodatages à proximité dans l'en-tête.