栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

android 获取视频第一帧作为缩略图的方法

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

android 获取视频第一帧作为缩略图的方法

今天,简单讲讲android里如何获取一个视频文件的第一帧作为缩略图显示在界面上。

之前,我说个最近需要从服务器下载视频文件,但是下载后肯定需要显示视频的缩略图在界面上给用户看,于是想到显示视频的第一帧作为缩略图。但是我不知道具体怎么写,于是在网上查找资料,最终是解决了问题。这里记录一下。

一.使用MediametadataRetriever获取视频的第一帧作为缩略图


 
public static Bitmap getVideoThumb(String path) { 
 
MediametadataRetriever media = new MediametadataRetriever(); 
 
media.setDataSource(path); 
 
return media.getframeAtTime(); 
 
} 

这里需要注意一点,从API 10开始新增一类MediametadataRetriever可以用来获取媒体文件的信息,可以获取视频任何一帧的缩略图。所以使用MediametadataRetriever的API最小为10.

这里还列举一下MediametadataRetriever获取视频的其他几个函数:

//获取第一帧原尺寸图片
mmrc.getframeAtTime();
 
//获取指定位置的原尺寸图片 注意这里传的timeUs是微秒
mmrc.getframeAtTime(timeUs, option);
 
//获取指定位置指定宽高的缩略图
mmrc.getScaledframeAtTime(timeUs, MediametadataRetrieverCompat.OPTION_CLOSEST, width, height);
 
//获取指定位置指定宽高并且旋转的缩略图
mmrc.getScaledframeAtTime(timeUs, MediametadataRetrieverCompat.OPTION_CLOSEST, width, height, rotate);

这里简单讲讲,media.getframeAtTime()实际上也是调用mmrc.getframeAtTime(-1, OPTION_CLOSEST_SYNC );即获取从-1秒后最近位置的关键帧,其实就是第一帧数据。下面简单说一下public Bitmap getframeAtTime(long timeUs, int option):

public Bitmap getframeAtTime(long timeUs, int option) 第一个参数是传入时间,只能是us(微秒) ,当时我传入的ms,获取的总是第一帧,所以这个问题都弄了好久。

然后是第二个参数,先看看官方解释:

OPTION_CLOSEST    在给定的时间,检索最近一个帧,这个帧不一定是关键帧。

OPTION_CLOSEST_SYNC    在给定的时间,检索最近一个同步与数据源相关联的的帧(关键帧)。

OPTION_NEXT_SYNC  在给定时间之后检索一个同步与数据源相关联的关键帧。

OPTION_PREVIOUS_SYNC   顾名思义,同上

二.使用ThumbnailUtils获取视频的第一帧作为缩略图


  public static Bitmap getVideoThumbnail(String videoPath, int width, int height,int kind) {
    Bitmap bitmap = null;
    // 获取视频的缩略图
    bitmap = ThumbnailUtils.createVideoThumbnail(videoPath, kind); //調用ThumbnailUtils類的靜態方法createVideoThumbnail獲取視頻的截圖;
    if(bitmap!= null){
      bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,
   ThumbnailUtils.OPTIONS_RECYCLE_INPUT);//調用ThumbnailUtils類的靜態方法extractThumbnail將原圖片(即上方截取的圖片)轉化為指定大小;
    }
    return bitmap;
  }

简单讲讲,这个其实很简单,就是调用ThumbnailUtils.createVideoThumbnail(path, kind)获取第一帧数据,然后通过bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height, ThumbnailUtils.OPTIONS_RECYCLE_INPUT);将图片转成指定大小。

下面还列举如何将bitmap保存到文件,因为获取到视频的缩略图后,可能需要保存到本地,下次进入app时可以直接查看。


 
public static String bitmap2File(Bitmap bitmap, String name) { 
 
File f = new File(Environment.getExternalStorageDirectory() + name + ".jpg"); 
 
if (f.exists()) f.delete(); 
 
FileOutputStream fOut = null; 
 
try { 
 
fOut = new FileOutputStream(f); 
 
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOut); 
 
fOut.flush(); 
 
fOut.close(); 
 
} catch (IOException e) { 
 
return null; 
 
} 
 
return f.getAbsolutePath(); 
 
}

android 获取视频第一帧作为缩略图就讲完了。

就这么简单。以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/154847.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号