image - thumbnailImageAtTime : now deprecated - What's the alternative?

标签 image video ios7 deprecated nsnotificationcenter

直到 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 对象的 NSArray 时间设置为 1 和 2。

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

-(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
        }
    }

关于image - thumbnailImageAtTime : now deprecated - What's the alternative?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19105721/

相关文章:

android - 如何获取设备支持的最大图片尺寸?

WPF - 如何对裁剪后的图像应用效果?

audio - 如何使用 mkvmerge 和外部时间码强制 A/V 同步?

c - strcpy 在 ios7 上表现不同

iOS 转化/安装跟踪

android - Android 中的色调效果

node.js - Node JS/Hapi 图片上传及安全

video - FFMPEG Doodstream 压缩方法

iphone - 是否可以以 60 fps 的速度生成视频并以 60 fps 的速度播放?

ios - iOS 7 中的应用程序崩溃