直到 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/