2010-10-26 12 views
7

Jak mogę obliczyć postęp procesu AVAssetWriter? Więc jeśli mam coś takiego:Jak mogę śledzić postęp pisania 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; 
     } 
    } 
    } 
}]; 

co mogę być pociągnięcie (lub sondowania) podczas pętli, aby dowiedzieć się, ile X z Y Mam ukończone?

Dzięki.

Odpowiedz

16

Bufor próbek zawiera kilka znaczników czasu. Można dostać się znacznik czasu prezentacji z wezwaniem do:

CMTime presTime = CMSampleBufferGetPresentationTimeStamp(sampleBuffer); 

można następnie używać, aby określić, jak daleko jesteś w swoim źródło bufora wejściowego. presTime/duration powinno dać wartość od 0,0 do 1,0 reprezentującą przybliżony postęp. Jeśli chcesz być bardziej precyzyjny, możesz spróbować uwzględnić czas trwania próbek w buforze próbek za pomocą CMSampleBufferGetDuration().

Jeśli czas prezentacji nie działa, należy spojrzeć na inne znaczniki czasu znajdujące się w pobliżu w nagłówku.