在我使用iOS7更新之前...

UIImage *image = [moviePlayer thumbnailImageAtTime:1.0 timeOption:MPMovieTimeOptionNearestKeyFrame];

...取得了巨大的成功,因此我的应用可以显示用户刚拍摄的视频的静止图像。

我了解这种方法,因为iOS7现已弃用,我需要替代方法。我看到有一种方法

- (void)requestThumbnailImagesAtTimes:(NSArray *)playbackTimes timeOption:(MPMovieTimeOption)option

但是我如何从中返回图像,以便将其放置在videoReview按钮图像中?

预先感谢吉姆。

****编辑的问题,尝试通知中心方法后***

我使用了以下代码-

[moviePlayer requestThumbnailImagesAtTimes:times timeOption:MPMovieTimeOptionNearestKeyFrame];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(MPMoviePlayerThumbnailImageRequestDidFinishNotification::) name:MPMoviePlayerThumbnailImageRequestDidFinishNotification object:moviePlayer];

我做了两个NSNumber对象1和2的NSArray时间。

然后,我尝试通过以下方法捕获通知

-(void)MPMoviePlayerThumbnailImageRequestDidFinishNotification: (NSDictionary*)info{

UIImage *image = [info objectForKey:MPMoviePlayerThumbnailImageKey];

然后继续使用此缩略图图像作为按钮图像作为预览.....,但是它不起作用。

如果您从我的编码中看到我出了错,那么您的帮助将再次受到赞赏。干杯

最佳答案

设法找到使用AVAssetImageGenerator的好方法,请参见下面的代码...

AVURLAsset *asset1 = [[AVURLAsset alloc] initWithURL:partOneUrl options:nil];
AVAssetImageGenerator *generate1 = [[AVAssetImageGenerator alloc] initWithAsset:asset1];
generate1.appliesPreferredTrackTransform = YES;
NSError *err = NULL;
CMTime time = CMTimeMake(1, 2);
CGImageRef oneRef = [generate1 copyCGImageAtTime:time actualTime:NULL error:&err];
UIImage *one = [[UIImage alloc] initWithCGImage:oneRef];
[_firstImage setImage:one];
_firstImage.contentMode = UIViewContentModeScaleAspectFit;

在头文件中,请导入

#import <AVFoundation/AVFoundation.h>

它运行完美,我已经能够从viewDidLoad调用它,这比从viewDidAppear调用已弃用的thumbNailImageAtTime:更快。

希望这对其他遇到相同问题的人有所帮助。

* **更新Swift 5.1 ****

有用的功能...
    func createThumbnailOfVideoUrl(url: URL) -> UIImage? {
        let asset = AVAsset(url: url)
        let assetImgGenerate = AVAssetImageGenerator(asset: asset)
        assetImgGenerate.appliesPreferredTrackTransform = true

        let time = CMTimeMakeWithSeconds(1.0, preferredTimescale: 600)
        do {
            let img = try assetImgGenerate.copyCGImage(at: time, actualTime: nil)
            let thumbnail = UIImage(cgImage: img)
            return thumbnail
        } catch {
          print(error.localizedDescription)
          return nil
        }
    }

10-04 22:11
查看更多