First frame of a video using AVFoundation

后端 未结 3 520
庸人自扰
庸人自扰 2021-02-01 19:56

I\'m trying to get the first frame of a video using the classes in AVFoundation. But it appears to not be getting an image at all.

My code currently looks like this

相关标签:
3条回答
  • 2021-02-01 20:02

    Doing this in Swift 4.0:

                // Assumes you have a local `fileURL`
    
                var avAsset = AVURLAsset(url: fileURL, options: nil)
                var imageGenerator = AVAssetImageGenerator(asset: avAsset)
                imageGenerator.appliesPreferredTrackTransform = true
                var thumbnail: UIImage?
    
                do {
                    thumbnail = try UIImage(cgImage: imageGenerator.copyCGImage(at: CMTime(seconds: 0, preferredTimescale: 1), actualTime: nil))
                } catch let e as NSError {
                    print("Error: \(e.localizedDescription)")
                }
    
    0 讨论(0)
  • 2021-02-01 20:24

    I solved it. Apparently using [NSURL fileURLWithPath:videoPath] instead of [NSURL URLWithString:videoPath] makes all the difference.

    0 讨论(0)
  • 2021-02-01 20:27

    I used null0pointer solution but in some videos I recieved the first frame rotated. To resolve this issue I set to TRUE the appliesPreferredTrackTransform property of AVAssetImageGenerator. And this code looks like this:

    AVURLAsset* asset = [AVURLAsset URLAssetWithURL:fileURL options:nil];
    AVAssetImageGenerator* imageGenerator = [AVAssetImageGenerator assetImageGeneratorWithAsset:asset];
    [imageGenerator setAppliesPreferredTrackTransform:TRUE];
    UIImage* image = [UIImage imageWithCGImage:[imageGenerator copyCGImageAtTime:CMTimeMake(0, 1) actualTime:nil error:nil]];
    [self.imageView setImage:image];
    
    0 讨论(0)
提交回复
热议问题