在我使用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
}
}