2010-10-26 12 views
7

Wie kann ich den Fortschritt eines AVAssetWriter-Prozesses berechnen? Also, wenn ich so etwas wie:Wie kann ich den Fortschritt des Schreibens von AVAssetWriter verfolgen?

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

was kann ich (oder Polling) Strang ziehen während der Schleife, wie viele x von y, um herauszufinden, ich abgeschlossen hat?

Danke.

Antwort

16

Der Beispielpuffer hat mehrere Zeitstempel. Sie können den Darstellungs-Zeitstempel mit einem Anruf erhalten zu:

CMTime presTime = CMSampleBufferGetPresentationTimeStamp(sampleBuffer); 

Sie könnten dann verwenden, um zu bestimmen, wie weit Sie in Ihre Quelle für den Eingangspuffer. presTime/duration sollte Ihnen einen Wert von 0.0 bis 1.0 geben, der den ungefähren Fortschritt darstellt. Wenn Sie präziser arbeiten möchten, können Sie versuchen, die Dauer der Samples im Sample-Puffer mit CMSampleBufferGetDuration() zu berücksichtigen.

Wenn die Präsentationszeit für Sie nicht funktioniert, sehen Sie sich die anderen Zeitstempel in der Nähe in der Kopfzeile an.

Verwandte Themen