I am trying to acquire a thumbnail from a video url. The video is a stream (HLS) with the m3u8 format. I've already tried requestThumbnailImagesAtTimes from the MPMoviePlayerController, but that didn't work. Does anyone have a solution for that problem? If so how'd you do it?
In android, we can use the MediaMetadataRetriever to retrieve a thumbnail image of an online video from its url. MediaMetadataRetriever can be used to retrieve frame and metadata from an input media file.
Swift code to generate thumbnail from video URL:let frameImg = UIImage(cgImage: img!)
If you don't want to use MPMoviePlayerController
, you can do this:
AVAsset *asset = [AVAsset assetWithURL:sourceURL]; AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc]initWithAsset:asset]; CMTime time = CMTimeMake(1, 1); CGImageRef imageRef = [imageGenerator copyCGImageAtTime:time actualTime:NULL error:NULL]; UIImage *thumbnail = [UIImage imageWithCGImage:imageRef]; CGImageRelease(imageRef); // CGImageRef won't be released by ARC
Here's an example in Swift:
func thumbnail(sourceURL sourceURL:NSURL) -> UIImage { let asset = AVAsset(URL: sourceURL) let imageGenerator = AVAssetImageGenerator(asset: asset) let time = CMTime(seconds: 1, preferredTimescale: 1) do { let imageRef = try imageGenerator.copyCGImageAtTime(time, actualTime: nil) return UIImage(CGImage: imageRef) } catch { print(error) return UIImage(named: "some generic thumbnail")! } }
I prefer using AVAssetImageGenerator
over MPMoviePlayerController
because it is thread-safe, and you can have more than one instantiated at a time.
Acquire a thumbnail from a video url.
NSString *strVideoURL = @"http://www.xyzvideourl.com/samplevideourl"; NSURL *videoURL = [NSURL URLWithString:strVideoURL] ; MPMoviePlayerController *player = [[[MPMoviePlayerController alloc] initWithContentURL:videoURL]autorelease]; UIImage *thumbnail = [player thumbnailImageAtTime:1.0 timeOption:MPMovieTimeOptionNearestKeyFrame]; player = nil;
Replace your video URL string with strVideoURL
. You will get thumbnail as a output from video
. And thumbnail is UIImage
type data !
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With