如何跟踪AVAssetWriter写入的进度?

时间:2010-10-26 22:38:13

标签: iphone objective-c cocoa avfoundation 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;
      }
    }
  }
}];

我可以在循环中拉出(或轮询)以确定我完成了多少x?

感谢。

2 个答案:

答案 0 :(得分:18)

样本缓冲区上有几个时间戳。您可以通过以下方式获取演示时间戳:

CMTime presTime = CMSampleBufferGetPresentationTimeStamp( sampleBuffer );

然后,您可以使用它来确定您输入缓冲区的源的距离。 presTime / duration应该给出一个代表近似进度的0.0到1.0的值。如果您需要更精确,可以尝试使用CMSampleBufferGetDuration()来计算样本缓冲区中样本的持续时间。

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

答案 1 :(得分:1)

您可以使用以下代码跟踪进度。您需要视频的总时长,然后才能使用下面的代码。

strlen

现在,您需要计算压缩视频的当前时间戳。

$img=$_POST['img'];
$len = strlen("http://localhost/uploads/");
$new_path = substr($img, $len, strlen($img)-$len); 
if(unlink($new_path)){
    echo "Deleted";
}
else{
    echo "Fail";
}