Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何跟踪AVAssetWriter’;她在写什么?_Iphone_Objective C_Cocoa_Avfoundation_Avassetwriter - Fatal编程技术网

Iphone 如何跟踪AVAssetWriter’;她在写什么?

Iphone 如何跟踪AVAssetWriter’;她在写什么?,iphone,objective-c,cocoa,avfoundation,avassetwriter,Iphone,Objective C,Cocoa,Avfoundation,Avassetwriter,如何计算AVAssetWriter流程的进度?因此,如果我有类似于: [assetWriterInput requestMediaDataWhenReadyOnQueue:queue usingBlock:^{ while (1){ if ([assetWriterInput isReadyForMoreMediaData]) { CMSampleBufferRef sampleBuffer = [audioMixOutput copyNextSampleBuffer];

如何计算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/y


谢谢。

样本缓冲区上有几个时间戳。您可以通过拨打以下电话获得演示时间戳:

CMTime presTime = CMSampleBufferGetPresentationTimeStamp( sampleBuffer );
然后,您可以使用它来确定输入缓冲区在源中的位置。PreTime/duration应该为您提供一个0.0到1.0的值,表示大致的进度。如果需要更精确,可以尝试使用CMSampleBufferGetDuration()在样本缓冲区中考虑样本的持续时间


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

您可以使用下面的代码跟踪进度。您需要视频的总持续时间,您将使用下面的代码获得

let asset = AVAsset(url: urlToCompress);
let duration = asset.duration
let durationTime = CMTimeGetSeconds(duration)
现在,您需要计算压缩视频的当前时间戳

let timeStamp = CMSampleBufferGetPresentationTimeStamp(sample!)
let timeSecond = CMTimeGetSeconds(timeStamp)
let per = timeSecond / durationTime
print("Duration --- \(per)")
DispatchQueue.main.async {
    self.progress.progress = Float(per)
}