最近做了個小應用,有涉及到本地視頻播放及列表顯示。
其中一個知識點就是獲取本地存儲視頻,用來界面中的封面顯示。
記錄如下:
//videoURL:本地視頻路徑 time:用來控制視頻播放的時間點圖片截取 -(UIImage*) thumbnailImageForVideo:(NSURL *)videoURL atTime:(NSTimeInterval)time { AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:videoURL options:nil]; NSParameterAssert(asset); AVAssetImageGenerator *assetImageGenerator =[[AVAssetImageGenerator alloc] initWithAsset:asset]; 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] : nil; return thumbnailImage; }
獲得的Image直接顯示即可。
如果想獲取網絡圖片,只要替換NSURL方式即可。
[NSURL URLWithString:@"network url"]
.PS:
swift實現:
/// 獲取本地video的封面截圖 /// /// - Parameter url: <#url description#> /// - Returns: <#return value description#> func getVideoFengMian(url:String) -> UIImage { if url.isEmpty { //默認封面圖 return UIImage(named: "screenVideo")! } let aset = AVURLAsset(url: URL(fileURLWithPath: url), options: nil) let assetImg = AVAssetImageGenerator(asset: aset) assetImg.appliesPreferredTrackTransform = true assetImg.apertureMode = AVAssetImageGeneratorApertureModeEncodedPixels do{ let cgimgref = try assetImg.copyCGImage(at: CMTime(seconds: 10, preferredTimescale: 50), actualTime: nil) return UIImage(cgImage: cgimgref) }catch{ return UIImage(named: "screenVideo")! } }
參數是本地url,可以根據需求自行更改參數等,這里只給個參考。