我正在创建一个从服务器下载电影的应用程序,并将它们存储在NSDocumentDirectory中。
这很好用。
我想在每个单元格的名称前面添加每个影片生成的缩略图。
我的问题:
如何在下载电影后立即生成缩略图(如此即时,无需先播放电影)?我想在NSDocumentDirectory中存储与jpg相同名称的缩略图。
我的猜测
-download movie并将其存储在NSDocumentDirectory(有效)
-somehow将电影加载到MPMoviePlayerController的内存中(不知道如何)
- 加载到内存中时,使用thumbnailImageAtTime(MPMovieTimeOptionNearestKeyFrame)生成缩略图(应该可以)
- 存储它(应该可以)
如果有人能帮助我......
由于
答案 0 :(得分:5)
#import <MediaPlayer/MediaPlayer.h>
-(UIImage*)getFirstFrameFromVideoFile:(NSString*)sourceFilePath {
NSURL *videoURL = [NSURL fileURLWithPath:sourceFilePath];
MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:videoURL];
UIImage *thumbnail = [player thumbnailImageAtTime:1.0 timeOption:MPMovieTimeOptionNearestKeyFrame];
//Player autoplays audio on init
[player stop];
[player release];
return thumbnail;
}
您已经知道的其他任务。
答案 1 :(得分:3)
是的,使用MPMoviePlayer工作......但你必须确保你的应用程序中没有其他电影播放器在其他地方播放(即使是UIWebView插件......),否则你会遇到麻烦。 我这样做:
UIImage *thumbnail = nil;
NSURL *url = [NSURL fileURLWithPath:pathname];
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:url options:nil];
AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
generator.appliesPreferredTrackTransform = YES;
NSError *error = nil;
CMTime time = CMTimeMake(3, 1); // 3/1 = 3 second(s)
CGImageRef imgRef = [generator copyCGImageAtTime:time actualTime:nil error:&error];
if (error != nil)
NSLog(@"%@: %@", self, error);
thumbnail = [[UIImage alloc] initWithCGImage:imgRef];
CGImageRelease(imgRef);
希望这可能会有所帮助
答案 2 :(得分:1)
这是我用来生成缩略图的代码 (添加了一个用于测试的大型uiimageview,当我在其中加载本地图像时可以工作)
NSString *path;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
path = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"snijtechniekendir/videos"];
path = [path stringByAppendingPathComponent:[videos objectAtIndex:indexPath.row]];
NSURL *videoURL = [NSURL fileURLWithPath:path];
NSLog(@"video url: %@", videoURL);
MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:videoURL];
UIImage *thumbnail = [player thumbnailImageAtTime:1 timeOption:MPMovieTimeOptionNearestKeyFrame];
UIImageView *cellimage = [[UIImageView alloc] initWithFrame:CGRectMake(2, 2 , 400, 400)];
[cell.contentView addSubview:cellimage];
NSData *imgData = UIImagePNGRepresentation(thumbnail);
NSLog(@"lenght of video thumb: %@", [imgData length]);
[self.view addSubview:cellimage];
[cellimage setImage:thumbnail];
这是一个视频文件的日志
video url: file://localhost/Users/Home/Library/Application%20Support/iPhone%20Simulator/5.1/Applications/78C165BB-75A9-46A2-A257-469F8652A665/Documents/snijtechniekendir/videos/snijtechniek%2520brunoise.mp4
lenght of video thumb: (null)