object VideoThumbUtil {
fun loadLocalVideoThumb(videoFilePath: String?, cover: ImageView) {
// ThumbnailUtils.createVideoThumbnail(videoFilePath, MediaStore.Images.Thumbnails.MINI_KIND)?.let { thumb ->
// Glide.with(cover.context)
// .load(thumb)
// .error(R.drawable.icon_default_load_error)
// .placeholder(R.drawable.icon_default_placehold)
// .centerCrop()
// .into(cover)
// } ?: let {
// Logger.e("loadLocalVideoThumb error : $videoFilePath")
// cover.setImageResource(R.drawable.icon_default_load_error)
// cover.scaleType = ImageView.ScaleType.CENTER_CROP
// }
Glide.with(cover.context)
.load(videoFilePath)
.diskCacheStrategy(DiskCacheStrategy.DATA)
.error(R.drawable.icon_default_load_error)
.placeholder(R.drawable.icon_default_placehold)
.centerCrop()
.into(cover)
}
fun loadNetVideoThumb(videoHttpUrl: String?, cover: ImageView) {
// GlobalScope.launch (Dispatchers.IO) {
// var bitmap: Bitmap? = null
// val retriever = MediaMetadataRetriever()
// try {
// //根據url擷取縮略圖
// retriever.setDataSource(videoHttpUrl, mapOf())
// val totalTimeString = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)
// var totalTime = totalTimeString?.let {
// it.toLong() * 1000
// } ?: 5000
//
// while (totalTime > 1000) {
// totalTime /= 2
// bitmap = retriever.getFrameAtTime(totalTime, MediaMetadataRetriever.OPTION_CLOSEST_SYNC)
// if (bitmap != null) break
// }
// } finally {
// retriever.release()
// }
//
// GlobalScope.launch (Dispatchers.Main) {
// bitmap?.let {
// Glide.with(cover)
// .load(it)
// .error(R.drawable.layer_load_error)
// .placeholder(R.drawable.layer_placehold)
// .centerCrop()
// .into(cover)
// } ?: let {
// Logger.e("loadNetVideoThumb error : $videoHttpUrl")
// cover.setImageResource(R.drawable.icon_default_load_error)
// cover.scaleType = ImageView.ScaleType.CENTER_CROP
// }
// }
// }
val context = cover.context
val requestOptions = RequestOptions.frameOf(5000L)
.set(VideoDecoder.FRAME_OPTION, MediaMetadataRetriever.OPTION_CLOSEST)
.transform(object : BitmapTransformation() {
override fun transform(pool: BitmapPool, toTransform: Bitmap, outWidth: Int, outHeight: Int): Bitmap {
return toTransform
}
override fun updateDiskCacheKey(messageDigest: MessageDigest) {
try {
messageDigest.update((context.packageName + "RotateTransform").toByteArray(charset("utf-8")))
} catch (e: Exception) {
e.printStackTrace()
}
}
})
Glide.with(context)
.load(videoHttpUrl)
.diskCacheStrategy(DiskCacheStrategy.DATA)
.apply(requestOptions)
.error(R.drawable.layer_load_error)
.placeholder(R.drawable.layer_placehold)
.centerCrop()
.into(cover)
}