Reputation: 11
I am able to generate the preview thumbnails using AVAssetImageGenerator. The problem is while I am seeking the player, I need to generate images at the respective seek positions continuously And AVAssetImageGenerator is giving the all images at a time with no order.
I have tried with below code.
func takeSnapshot(seekTime : CMTime) {
guard let asset = self.playerView?.player?.currentItem?.asset else {
debugPrint("No asset")
return
}
let imageGenerator = AVAssetImageGenerator(asset: asset)
imageGenerator?.appliesPreferredTrackTransform = true
imageGenerator?.maximumSize = CGSize(width: 320, height: 180)
if #available(tvOS 16.0, *) {
DispatchQueue.global(qos: .userInitiated).async {
self.imageGenerator?.generateCGImageAsynchronously(for: seekTime) { (image, requestedTime, error) in
guard let image = image else {
debugPrint("\(error?.localizedDescription) \(error)")
return
}
let thumbnail = UIImage(cgImage: image)
}
}
}
else {
// Fallback on earlier versions
DispatchQueue.global(qos: .userInitiated).async {
self.imageGenerator?.generateCGImagesAsynchronously(forTimes: [NSValue(time: seekTime)]) { (requestedTime, image, actualTime, result, error) in
guard let image = image else {
debugPrint("\(error?.localizedDescription) \(error)")
return
}
let thumbnail = UIImage(cgImage: image)
}
}
}
}
// Mark: Usage
let time = CMTime.init(seconds: 1), preferredTimescale: 1)
self.takeSnapshot(seekTime: time)
Upvotes: 1
Views: 185