Question

Comment puis-je calculer les progrès d'un processus de AVAssetWriter? Donc, si j'ai quelque chose comme:

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

Que puis-je être tirais (ou vote) au cours de la boucle pour savoir combien x de y que j'ai terminé?

Merci.

Était-ce utile?

La solution

Le tampon échantillon a plusieurs timbres de temps sur eux. Vous pouvez obtenir l'horodatage de présentation avec un appel à:

CMTime presTime = CMSampleBufferGetPresentationTimeStamp( sampleBuffer );

Vous pouvez ensuite utiliser pour déterminer dans quelle mesure vous êtes dans votre source pour le tampon d'entrée. presTime / durée devrait vous donner une valeur de 0,0 à 1,0 représentant la progression approximative. Si vous avez besoin pour être plus précis, vous pouvez essayer de prendre en compte la durée des échantillons dans l'échantillon tampon à l'aide CMSampleBufferGetDuration ().

Si le temps de présentation ne fonctionne pas pour vous regardez les autres horodateurs à proximité dans l'en-tête.

Autres conseils

Vous pouvez suivre les progrès en utilisant le code ci-dessous. Vous avez besoin d'une durée totale de la vidéo et vous obtiendrez en utilisant le code ci-dessous.

let asset = AVAsset(url: urlToCompress);
let duration = asset.duration
let durationTime = CMTimeGetSeconds(duration)

Maintenant, vous devez calculer l'horodatage actuel de la vidéo compressée.

let timeStamp = CMSampleBufferGetPresentationTimeStamp(sample!)
let timeSecond = CMTimeGetSeconds(timeStamp)
let per = timeSecond / durationTime
print("Duration --- \(per)")
DispatchQueue.main.async {
    self.progress.progress = Float(per)
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top