21

我正在尝试使用 AVFoundation 中的类来获取视频的第一帧。但它似乎根本没有得到图像。

我的代码目前看起来像这样

AVURLAsset* asset = [AVURLAsset URLAssetWithURL:[NSURL URLWithString:videoPath] options:nil];
AVAssetImageGenerator* imageGenerator = [AVAssetImageGenerator assetImageGeneratorWithAsset:asset];
UIImage* image = [UIImage imageWithCGImage:[imageGenerator copyCGImageAtTime:CMTimeMake(0, 1) actualTime:nil error:nil]];
[videoFrame setImage:image];

video path 的值/var/mobile/Applications/02F42CBF-D8BD-4155-85F2-8CF1E55B5023/Documents/videos/1334300431637030.mp4是肯定是视频,因为我可以用MPMoviePlayerViewController. 我不确定我做错了什么,但任何建议都会有所帮助。

谢谢。

4

3 回答 3

26

我解决了。显然使用[NSURL fileURLWithPath:videoPath]而不是[NSURL URLWithString:videoPath]使一切变得不同。

于 2012-04-19T08:33:46.123 回答
15

我使用了 null0pointer解决方案,但在某些视频中,我收到了旋转的第一帧。为了解决这个问题,我将 AVAssetImageGenerator 的 applyPreferredTrackTransform 属性设置为 TRUE。这段代码如下所示:

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];
于 2015-11-03T09:38:28.463 回答
4

在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)")
            }
于 2019-04-22T20:49:19.540 回答