こんにちは、Gabrazhitel!
この短い記事では、最新のiOSプロジェクトの1つで、ビデオでの経験をもう一度共有したいと思います。 今回は、ビデオからスクリーンショットを取得することに焦点を当てます。

インターネットでこの問題の解決策をいくつか
見つけましたが、それらはすべて
MPMoviePlayerControllerを介して実装されてい
ました 。 はい、これは解決策ですが、より高速で動作し、低速モバイルインターネットに最適な別の、おそらくより正確な解決策についてお話したいと思います。
この問題を解決するために必要なものは、標準クラス
AVAssetImageGeneratorと、
SDWebImageと呼ばれる多くの人が知っているgithub上の素晴らしいプロジェクトだけ
です 。
まず、
AVAssetImageGeneratorを使用して画像を取得し
ますNSURL *videoURL = [NSURL URLWithString:@"video_url"] AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:videoURL options:nil]; AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset]; NSError *error; CGImageRef imageRef = [generator copyCGImageAtTime:CMTimeMake(1, 2) actualTime:NULL error:&error]; if (!error) { UIImage *image = [[UIImage alloc] initWithCGImage:ref]; }
これで、可変画像に表示できる画像があり、キャッシュに入れるのもいいでしょう。
SDImageCacheはこのタスクに役立ちます。
キャッシュに画像を配置するには、キーを生成する必要があります。キーを使用して、そこからキーを削除し、1つの関数のみを呼び出します
NSString *imageCacheKey = [[@"video_url" lastPathComponent] stringByDeletingPathExtension]; [[SDImageCache sharedImageCache] storeImage:image forKey:imageCacheKey];
写真の取得も非常に簡単です。
[[SDImageCache sharedImageCache] queryDiskCacheForKey:imageCacheKey done:^(UIImage *image, SDImageCacheType cacheType) { if (image) { } }];
ブロックでは、nilの画像を確認する必要があります。 理由を説明する必要はないと思います:)。
それだけです。たとえば、
animateWithDurationを使用して 、滑らかな外観など、いくつかの効果を画像に追加できます。
self.photo.image = image; [UIView animateWithDuration:0.25 animations:^{ self.photo.alpha = 1.f; }];
ご清聴ありがとうございました。コメントのすべての質問にお答えします。実際の例はこちらから
ご覧いただけます:
https :
//github.com/Borodutch/BSVideoThumbnails