Sanjeev Esuka
Sanjeev Esuka

Reputation: 11

Generating Preview Thumbnails With I-Frames in AVPlayer

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

Answers (0)

Related Questions