2014-04-16 6 views
5

Das Problem, das ich habe, ist das Laden von 20 Bildern aus Video dauert zu lange. Je mehr Vorschaubilder ich bekommen möchte, desto länger muss ich warten. Methode, die ich verwende, ist generateCGImagesAsynchronouslyForTimes. Weiß jemand, warum ich dieses Problem habe?ios - generateCGImagesAsynchronousForTimes dauert zu lange

AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset]; 
generator.appliesPreferredTrackTransform = YES; 
generator.requestedTimeToleranceAfter = kCMTimeZero; 
generator.requestedTimeToleranceBefore = kCMTimeZero; 
CGSize maxSize = CGSizeMake(320, 180); 
generator.maximumSize = maxSize; 
AVAssetImageGeneratorCompletionHandler handler = ^(CMTime requestedTime, CGImageRef im, CMTime actualTime, AVAssetImageGeneratorResult result, NSError *error){ 

    if (result != AVAssetImageGeneratorSucceeded) { 
     NSLog(@"couldn't generate thumbnail, error:%@", error); 
    } 

    UIImage *frameImage = [UIImage imageWithCGImage:im]; 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [_frameImageView setImage:frameImage]; 
    }); 
}; 
[generator generateCGImagesAsynchronouslyForTimes:timeArray completionHandler:handler]; 
+1

Ich habe dasselbe Problem, hast du irgendeine Lösung? –

+0

@ScorpianAlive mit dem gleichen Problem, haben Sie eine Lösung gefunden? – Sam

Antwort

0

Ich kenne Ihre Probleme.

Das Generieren von Miniaturansichten dauert sehr lange, da Sie requestedTimeToleranceAfter und requestedTimeToleranceBefore für kCMTimeZero festlegen.

Lange Antwort: Wenn Sie spezifische TimeTolerance, wird es für Präzision statt Leistung gedreht werden. Wenn Sie nur ein Video-Thumbnail erstellen möchten, benötigen Sie kein Thumbnail mit hoher Genauigkeit.

Es ist ähnlich mit seekToTime mit Toleranz. Referenz von https://developer.apple.com/library/ios/documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/02_Playback.html#//apple_ref/doc/uid/TP40010188-CH3-SW3, Abschnitt Suchen - Positionieren des Abspielkopfs.

Kurze Antwort: Entfernen Sie einfach requestedTimeToleranceAfter und requestedTimeToleranceBefore.

+1

diese Antwort funktioniert nicht für mich. –

+1

@SalmanKhakwani diese Antwort funktioniert bei mir auch nicht – Sam