2010-10-26 76 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()来分析样本缓冲区中样本的持续时间。

如果演示时间不适用于您,请查看标题中附近的其他时间戳。