2010-10-26 101 views
7

如何計算AVAssetWriter進程的進度?所以,如果我有這樣的:如何跟蹤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; 
     } 
    } 
    } 
}]; 

我能在循環過程中拉(或輪詢)要弄清楚有多少Y的X我已經完成了?

謝謝。

回答

16

樣本緩衝區上有幾個時間戳。你可以用一個呼叫得到展現時間戳:

CMTime presTime = CMSampleBufferGetPresentationTimeStamp(sampleBuffer); 

然後,您可以用它來確定你是到源的輸入緩衝區多遠。 presTime /持續時間應該會給你一個0.0到1.0的值,代表近似的進度。如果您需要更加精確,可以嘗試使用CMSampleBufferGetDuration()來分析樣本緩衝區中樣本的持續時間。

如果演示時間不適用於您,請查看標題中附近的其他時間戳。