新增一個(gè)NSObject類(lèi)锄码,在.h文件中創(chuàng)建一個(gè)類(lèi)方法
+ (UIImage*) thumbnailImageForVideo:(NSURL*)videoURL atTime:(NSTimeInterval*)time;
然后在.m文件中實(shí)現(xiàn)方法
+ (UIImage*) thumbnailImageForVideo:(NSURL *)videoURL atTime:(NSTimeInterval)time {
AVURLAsset *asset = [[[AVURLAsset alloc] initWithURL:videoURL options:nil] autorelease];
NSParameterAssert(asset);
AVAssetImageGenerator *assetImageGenerator = [[[AVAssetImageGenerator alloc] initWithAsset:asset] autorelease];
assetImageGenerator.appliesPreferredTrackTransform = YES;
assetImageGenerator.apertureMode = AVAssetImageGeneratorApertureModeEncodedPixels;
CGImageRef thumbnailImageRef = NULL;
CFTimeInterval thumbnailImageTime = time;
NSError *thumbnailImageGenerationError = nil;
thumbnailImageRef = [assetImageGenerator copyCGImageAtTime:CMTimeMake(thumbnailImageTime, 60) actualTime:NULL error:&thumbnailImageGenerationError];
if (!thumbnailImageRef)
NSLog(@"thumbnailImageGenerationError %@", thumbnailImageGenerationError);
UIImage *thumbnailImage = thumbnailImageRef ? [[[UIImage alloc] initWithCGImage:thumbnailImageRef] autorelease] : nil;
return thumbnailImage;
}
如果你要獲取任意幀的圖片
獲取任意幀就要設(shè)定這個(gè)
assetImageGenerator.requestedTimeToleranceAfter = kCMTimeZero;
assetImageGenerator.requestedTimeToleranceBefore = kCMTimeZero;
加到上述類(lèi)方法中处硬,這個(gè)時(shí)候如果改變NSTimeInterval:time 這個(gè)參數(shù)可獲取任意幀的圖片
這個(gè)時(shí)候要獲取具體的幀數(shù)
//獲取每秒多少幀
float fps = [[[asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] nominalFrameRate];
//重寫(xiě)CMTimeMake(a,b) a當(dāng)前第幾幀, b每秒鐘多少幀.當(dāng)前播放時(shí)間a/b CMTimeMakeWithSeconds(a,b) a當(dāng)前時(shí)間,b每秒鐘多少幀.
CMTime inTime = CMTimeMake(1,60)把介,當(dāng)前第1幀,一秒60幀吉懊,當(dāng)前時(shí)間 1/60
這個(gè)時(shí)候inTime 替換
thumbnailImageRef = [assetImageGenerator copyCGImageAtTime:CMTimeMake(thumbnailImageTime, 60) actualTime:NULL error:&thumbnailImageGenerationError];
中CMTimeMaket
這個(gè)時(shí)候即可獲取第N幀圖片拖吼。
注意這個(gè)方法只支持網(wǎng)絡(luò)連接為mp4等可下載連接.或者本地視頻文件。
至于m3u8可用作直播流的連接琳水,不可直接獲取幀圖片肆糕,解壓的.ts文件也不可通過(guò)此方法獲取幀圖片≡谛ⅲ可用ffmpeg來(lái)獲取圖片诚啃,之后嘗試了,再發(fā)表一篇文章來(lái)介紹私沮。
另外始赎,提供一個(gè)思路,如果是直播要獲取第一幀圖片仔燕,有的直播SDK可能會(huì)提供造垛,有的是服務(wù)器直接提供一張圖片,有的用ffmpeg獲取第一幀圖片(相對(duì)比較麻煩)晰搀,實(shí)時(shí)請(qǐng)求五辽,實(shí)時(shí)更新圖片,我抓取了戰(zhàn)旗TV的數(shù)據(jù)接口外恕,首頁(yè)主播們的圖片都是實(shí)時(shí)請(qǐng)求杆逗,給的一張實(shí)時(shí)圖片。