android获取视频第⼀帧作为缩略图的⽅法
今天,简单讲讲android⾥如何获取⼀个视频⽂件的第⼀帧作为缩略图显⽰在界⾯上。
之前,我说个最近需要从服务器下载视频⽂件,但是下载后肯定需要显⽰视频的缩略图在界⾯上给⽤户看,于是想到显⽰视频的第⼀帧作为缩略图。但是我不知道具体怎么写,于是在⽹上查找资料,最终是解决了问题。这⾥记录⼀下。
⼀.使⽤MediaMetadataRetriever获取视频的第⼀帧作为缩略图
/**
* 获取视频⽂件截图
*
* @param path 视频⽂件的路径
* @return Bitmap 返回获取的Bitmap
*/
上海夏令营public static Bitmap getVideoThumb(String path) {
MediaMetadataRetriever media = new MediaMetadataRetriever();
media.tDataSource(path);
FrameAtTime();
}
这⾥需要注意⼀点,从API 10开始新增⼀类MediaMetadataRetriever可以⽤来获取媒体⽂件的信息,可以获取视频任何⼀帧的缩略图。所以使⽤MediaMetadataRetriever的API最⼩为10.
这⾥还列举⼀下MediaMetadataRetriever获取视频的其他⼏个函数:
//获取第⼀帧原尺⼨图⽚
//获取指定位置的原尺⼨图⽚注意这⾥传的timeUs是微秒
//获取指定位置指定宽⾼的缩略图
//获取指定位置指定宽⾼并且旋转的缩略图
这⾥简单讲讲,FrameAtTime()实际上也是调⽤FrameAtTime(-1, OPTION_CLOSEST_SYNC );即获取从-1秒后最近位置的关键帧,其实就是第⼀帧数据。下⾯简单说⼀下public Bitmap getFrameAtTime(long timeUs, int option):
public Bitmap getFrameAtTime(long timeUs, int option) 第⼀个参数是传⼊时间,只能是us(微秒) ,当时我传⼊的ms,获取的总是第⼀帧,所以这个问题都弄了好久。
own然后是第⼆个参数,先看看官⽅解释:
在给定的时间,检索最近⼀个帧,这个帧不⼀定是关键帧。
在给定的时间,检索最近⼀个同步与数据源相关联的的帧(关键帧)。
在给定时间之后检索⼀个同步与数据源相关联的关键帧。
顾名思义,同上
⼆.使⽤ThumbnailUtils获取视频的第⼀帧作为缩略图
/**
* 获取视频的缩略图lowes
* 先通过ThumbnailUtils来创建⼀个视频的缩略图,然后再利⽤ThumbnailUtils来⽣成指定⼤⼩的缩略图。
* 如果想要的缩略图的宽和⾼都⼩于MICRO_KIND,则类型要使⽤MICRO_KIND作为kind的值,这样会节省内存。
* @param videoPath 视频的路径
* @param width 指定输出视频缩略图的宽度
* @param height 指定输出视频缩略图的⾼度度
* @param kind 参照MediaStore.Images(Video).Thumbnails类中的常量MINI_KIND和MICRO_KIND。
* 其中,MINI_KIND: 512 x 384,MICRO_KIND: 96 x 96
* @return 指定⼤⼩的视频缩略图
*/
public static Bitmap getVideoThumbnail(String videoPath, int width, int height,int kind) {
Bitmap bitmap = null;
// 获取视频的缩略图
bitmap = ateVideoThumbnail(videoPath, kind); //調⽤ThumbnailUtils類的靜態⽅法createVideoThumbnail獲取視頻的截圖;
if(bitmap!= null){
bitmap = actThumbnail(bitmap, width, height,
holy cowThumbnailUtils.OPTIONS_RECYCLE_INPUT);//調⽤ThumbnailUtils類的靜態⽅法extractThumbnail將原圖⽚(即上⽅截取的圖⽚)轉化為指定⼤⼩; }
现在进行时练习题return bitmap;
}
简单讲讲,这个其实很简单,就是调⽤ateVideoThumbnail(path, kind)获取第⼀帧数据,然后通过bitmap = actThumbnail(bitmap, width, height, ThumbnailUtils.OPTIONS_RECYCLE_INPUT);将图⽚转成指定⼤
⼩。
下⾯还列举如何将bitmap保存到⽂件,因为获取到视频的缩略图后,可能需要保存到本地,下次进⼊app时可以直接查看。
排山倒海英文版
/**
* Bitmap保存成File
*
* @param bitmap input bitmap
* @param name output file's name
四川大学分数线
* @return String output file's path
*/
public static String bitmap2File(Bitmap bitmap, String name) {
File f = new ExternalStorageDirectory() + name + ".jpg");
if (f.exists()) f.delete();boystown
FileOutputStream fOut = null;
try {
fOut = new FileOutputStream(f);
fOut.flush();
fOut.clo();
} catch (IOException e) {
return null;小学英语单词表
}
AbsolutePath();
}
android 获取视频第⼀帧作为缩略图就讲完了。
plutocracy就这么简单。以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。