+ (UIImage *)imageFromMovie:(NSURL *)movieURL atTime:(NSTimeInterval)time {
// set up the movie player
MPMoviePlayerController *mp = [[MPMoviePlayerController alloc]
initWithContentURL:movieURL];
mp.shouldAutoplay = NO;
mp.initialPlaybackTime = time;
mp.currentPlaybackTime = time;
// get the thumbnail
UIImage *thumbnail = [mp thumbnailImageAtTime:time
timeOption:MPMovieTimeOptionNearestKeyFrame];
// clean up the movie player
[mp stop];
[mp release];
return(thumbnail);
}
5 回答
试试这个(它实际上并没有显示电影播放器):
它应该是一个同步调用,所以它可能会阻塞主线程,但是当我在电影开头使用时间时,似乎对我来说很快就会运行 . 如果你这么做很多,你可以把它作为一个类别添加到UIImage上,这就是我所做的 .
我从你的问题中看到你想在保存电影之前这样做,我想如果没有文件网址可能无法正常工作 . 但是,如果您使用UIImagePickerController进行摄像头捕获,则可以使用密钥UIImagePickerControllerMediaURL将此函数传递给imagePickerController:didFinishPickingMediaWithInfo:的信息字典中返回的URL .
实际上更好的解决方案是使用AVFoundation框架来执行此操作 . 它绕过了构造MPMoviePlayerController的需要,如果与UIImagePickerController结合使用(至少就是我所经历过的),会导致相机的光圈保持关闭的问题 .
我使用的代码:
Very simple try this...
Step 1 :导入 Headers
#import <MediaPlayer/MediaPlayer.h>
Step 2 :获取网址路径
Step 3 :终于搞定了缩略图
试试这个 :
需要添加以获得正确的框架 .
使用
AVFoundation
框架和Swift 3.0的解决方案代码(注释代码不是必需的,在代码下面讨论 - 您必须决定是否需要它):请注意,您可以考虑在后台线程上运行此代码,因为创建缩略图可能是一项代价高昂的操作 .
另外,请看一下
AVAssetImageGenerator
类的一些属性:requestedTimeToleranceBefore
(Apple's documentation):requestedTimeToleranceAfter
(Apple's documentation):maximumSize
(Apple's documentation):