Ich arbeite an einer OS X App, die AVAssetImageGenerator.generateCGImagesAsynchronouslyForTimes
verwendet, und es funktioniert normalerweise gut. Hin und wieder enthält das Miniaturbild, das ich zurückbekomme, nur die ersten paar Pixelreihen, und der Rest ist grün, manchmal haben die Bilder unterschiedliche Grüntöne. Es ist sehr schwer aufzuspüren, weil es nicht konsistent passiert, aber wenn es etwa die Hälfte der Thumbnails betrifft, sind sie betroffen. Dies ist ein Bild von dem, was ich erwarte, um zu sehen:generateCGImagesAsynchronConnorousForTimes generieren manchmal ganze Thumbnails nicht
Aber oft dies geschieht:
Hier ist der Code, den ich die Thumbnails erzeugen bin mit:
let assetGenerator = AVAssetImageGenerator(asset: AVURLAsset(URL: url))
assetGenerator.appliesPreferredTrackTransform = true
let time = CMTime(seconds: 0, preferredTimescale: 30)
let handler: AVAssetImageGeneratorCompletionHandler = { _, image, _, res, error in
defer { dispatch_group_leave(self.waitForThumbnail!) }
guard let image = image where res == .Succeeded else {
if let error = error { print(error) }
return
}
let s = CGSize(width: CGImageGetWidth(image), height: CGImageGetHeight(image))
self.thumbnail = NSImage(CGImage: image, size: s)
}
waitForThumbnail = dispatch_group_create()
dispatch_group_enter(waitForThumbnail!)
assetGenerator.maximumSize = maxThumbnailSize
assetGenerator.generateCGImagesAsynchronouslyForTimes([NSValue(CMTime: time)], completionHandler: handler)
Und das ist, wie ich die Thumbnails abrufen:
dispatch_group_wait(file.waitForThumbnail!, DISPATCH_TIME_FOREVER)
dispatch_async(dispatch_get_main_queue()) {
self.imageView.image = file.thumbnail
}
Jede Hilfe wird sehr geschätzt, danke!
Aus Neugier, wie erstellen Sie die 'AVAsset's? Wenn Sie 'NSItemProvider' verwenden, wird ein vollständiger Handler verwendet, der die Standardminiatur des Applets als Bild für diese Datei angibt. – NSGangster
Oh wirklich? Das klingt nett, danke, dass ich das versuchen muss. Ich benutze 'AVURLAsset (URL: url)', um sie jetzt zu erstellen. – Addison
[Link] (https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSItemProvider_Class/#//apple_ref/occ/instm/NSItemProvider/loadPreviewImageWithOptions:completionHandler]). Hier ist ein Link zu diesem Vorschaubild-Handler. Und ich habe gerade überprüft 'NSItemProvider' hat' initWithURL', wenn Sie nur das verwenden wollten. – NSGangster