【问题标题】:Getting thumbnail of a video picked from photos library获取从照片库中挑选的视频的缩略图
【发布时间】:2014-11-09 02:03:32
【问题描述】:

我知道这个问题在 stackoverflow 上已经被问过很多次了。但我的问题是不同的。 我正在迭代照片库的相册以获取所有视频及其缩略图。 现在,问题是,我的代码获取每个视频的缩略图非常慢。例如,我的相机胶卷中有 14 个视频,生成缩略图的总时间约为 3-4 秒。我正在使用此代码。 <pre></pre>

+(UIImage*)imageFromVideoAtURL:(NSURL*)contentURL {
   UIImage* theImage = nil;
   AVURLAsset* asset = [[AVURLAsset alloc] initWithURL:contentURL options:nil];
   AVAssetImageGenerator* generator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
   generator.appliesPreferredTrackTransform = YES;
   NSError* err = NULL;
   CMTime time = CMTimeMake(1, 60);
   CGImageRef imgRef = [generator copyCGImageAtTime:time actualTime:NULL error:&err];

   theImage = [[[UIImage alloc] initWithCGImage:imgRef] autorelease];

   CGImageRelease(imgRef);
   [asset release];
   [generator release];

   return theImage;
}

我正在寻找一种方法来非常快速地获取所有视频的缩略图,这样用户就不必等待了。我在 Apple Store 上看到过在几微秒内完成相同操作的应用程序。请帮忙。

我也试过这段代码生成缩略图,也很慢。

    MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:mediaUrl];
    moviePlayer.shouldAutoplay = NO;
    UIImage *thumbnail = [[moviePlayer thumbnailImageAtTime:0.0 timeOption:MPMovieTimeOptionNearestKeyFrame] retain];
    [imageView setImage:thumbnail];  //imageView is a UIImageView

【问题讨论】:

  • 当您使用图片库中的视频时,您是否尝试过使用ALAssetRepresentation 类的thumbnail 方法?
  • 我猜ALAssetRepresentation 中没有方法thumbnail。是的,我正在使用图片库中的视频。
  • 非常抱歉我错误地引用了班级名称。它应该是ALAsset。它包含thumbnail 以及aspectRatioThumbnail 方法。
  • 谢谢@AyanSengupta,我在“ALAsset”类中找到了这个。会试试的。您能否将其添加为答案,以便我接受。

标签: ios video thumbnails


【解决方案1】:

如果您从图片库加载视频,它应该已经嵌入了视频的缩略图。这可以使用ALAsset 类的thumbnailaspectRatioThumnail 方法访问。

所以在你的情况下,缩略图可以像这样加载:

ALAssetLibrary* lib = [ALAssetLibrary new];
[lib assetForURL:contentURL resultBlock:^(ALAsset* asset) {
    CGImageRef thumb = [asset thumbnail];

    dispatch_async(dispatch_get_main_queue(), ^{
        //do any UI operation here with thumb
    });
}];

请确保在主队列中进行任何 UIKit 调用,因为 assetForURL:: 方法可能会在某些后台线程中调用 resultBlock

【讨论】:

  • 由于 ALAssetLibrary 已从 iOS9.0 中弃用,我们如何从视频的 PHAsset 中获取缩略图。
  • @UtsavDusad 你需要使用[PHImageManager defaultManager] requestImageForAsset:...。但答案超出了这个问题的范围。因此,如果您还没有解决它,请创建一个单独的问题以了解确切的过程。
  • 请不要在您的帖子中添加“希望对您有帮助”。这是一种修辞手段,试图讨好问题作者(或后续读者)以争取投票。它不适合技术写作——每个人都假设其他人都在努力提供帮助。谢谢!
猜你喜欢
  • 2012-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-03
  • 1970-01-01
  • 1970-01-01
  • 2011-05-25
  • 1970-01-01
相关资源
最近更新 更多