前言

  在Android里获取视频的信息主要依靠MediaMetadataRetriever实现

获取最佳视频预览图

所谓的最佳就是MediaMetadataRetriever自己计算的

    /**
* 获取视频缩略图
* @param vedioFile
* @return
*/
public static Bitmap getVedioThumbnail(File vedioFile){
if (!vedioFile.exists()){
L.e("视频文件不存在");
return null;
} MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(vedioFile.getAbsolutePath());
Bitmap bitmap = retriever.getFrameAtTime();
return bitmap; }

如果你的视频文件是在assets文件里

AssetFileDescriptor adf = context.getAssets().openFd(vedioFile.getAbsolutePath());//如果是app assets目录的视频文件
retriever.setDataSource(adf.getFileDescriptor());

获取指定时间位置的视频预览图

/**
* 获取视频缩略图
* @param vedioFile
* @return
*/
public static Bitmap getVedioThumbnail(File vedioFile){
if (!vedioFile.exists()){
L.e("视频文件不存在");
return null;
} MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(vedioFile.getAbsolutePath());
Bitmap bitmap = retriever.getFrameAtTime(1000);//参数为毫秒,就是返回靠近这个时间的帧图
return bitmap; }

获取视频播放时长

    /**
* 返回视频播放总时长
* @param vedioFile
* @return
*/
public static Long getVedioTotalTime(File vedioFile){
if (!vedioFile.exists()){
L.e("视频文件不存在");
return null;
}
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(vedioFile.getAbsolutePath());
String timeString = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
Long time = Long.valueOf(timeString);
return time; }

获取其他信息参考表

    / **
*元数据键,用于检索描述的数字字符串
*原始录音中音频数据源的顺序。
* /
public static final int METADATA_KEY_CD_TRACK_NUMBER = 0;
/ **
元数据键,用于检索有关专辑标题的信息数据源。
* /
public static final int METADATA_KEY_ALBUM = 1;
/ **
元数据键,用于检索有关艺术家的信息数据源。
* /
public static final int METADATA_KEY_ARTIST = 2;
/ **
元数据键,用于检索有关作者的信息数据源。
* /
public static final int METADATA_KEY_AUTHOR = 3;
/ **
元数据键,用于检索有关作曲家的信息数据源。
* /
public static final int METADATA_KEY_COMPOSER = 4;
/ **
用于检索创建数据源的日期的元数据键或修改。
* /
public static final int METADATA_KEY_DATE = 5;
/ **
元数据键,用于检索数据的内容类型或类型资源。
* /
public static final int METADATA_KEY_GENRE = 6;
/ **
用于检索数据源标题的元数据键。
* /
public static final int METADATA_KEY_TITLE = 7;
/ **
元数据键,用于检索创建数据源的年份或修改。
* /
public static final int METADATA_KEY_YEAR = 8;
/ **
元数据键,用于检索数据源的播放持续时间。
* /
public static final int METADATA_KEY_DURATION = 9;
/ **
用于检索音轨数量的元数据键,例如音频,视频,文本,在数据源中,如mp4或3gpp文件。
* /
public static final int METADATA_KEY_NUM_TRACKS = 10;
/ **
用于检索作者信息的元数据键(例如词作者)的数据源。
* /
public static final int METADATA_KEY_WRITER = 11;
/ **
*于检索数据源的mime类型的元数据键。一些
示例mime类型包括:“video / mp4”,“audio / mp4”,“audio / amr-wb”,等
* /
public static final int METADATA_KEY_MIMETYPE = 12;
/ **
元数据键,用于检索有关表演者的信息
与数据源关联的艺术家。
* /
public static final int METADATA_KEY_ALBUMARTIST = 13;
/ **
元数据键,用于检索描述哪个的数字字符串
音频数据源来自的一部分。
* /
public static final int METADATA_KEY_DISC_NUMBER = 14;
/ **
用于检索音乐专辑编辑状态的元数据键。
* /
public static final int METADATA_KEY_COMPILATION = 15;
/ **
*如果此密钥存在,则媒体包含音频内容。
* /
public static final int METADATA_KEY_HAS_AUDIO = 16;
/ **
如果此密钥存在,则媒体包含视频内容。
* /
public static final int METADATA_KEY_HAS_VIDEO = 17;
/ **
如果媒体包含视频,此密钥将检索其宽度。
* /
public static final int METADATA_KEY_VIDEO_WIDTH = 18;
/ **
如果媒体包含视频,此密钥将检索其高度。
* /
public static final int METADATA_KEY_VIDEO_HEIGHT = 19;
/ **
*此密钥检索平均比特率(以位/秒为单位)(如果可用)。
* /
public static final int METADATA_KEY_BITRATE = 20;
/ **
此键检索文本轨道的语言代码(如果有)。如果存在多个文本轨迹,则返回值将如下所示:
* /
public static final int METADATA_KEY_TIMED_TEXT_LANGUAGES = 21;
/ **
如果此密钥存在,则媒体受到保护。
* /
public static final int METADATA_KEY_IS_DRM = 22;
/ **
此密钥检索位置信息(如果有)。
位置应根据ISO-6709标准指定一个mp4 / 3gp的盒子“@xyz”。经度为-90度和纬度的位置
例如,180度的将被检索为“-90.0000 + 180.0000”。
* /
public static final int METADATA_KEY_LOCATION = 23;
/ **
此键以度为单位检索视频旋转角度(如果可用)。
视频旋转角度可以是0度,90度,180度或270度。
* /
public static final int METADATA_KEY_VIDEO_ROTATION = 24;
/ **
*此键检索原始捕获帧速率(如果是)可用。捕获帧率将是一个浮点号码。
* /
public static final int METADATA_KEY_CAPTURE_FRAMERATE = 25;
/ **
如果此键存在,则媒体包含静止图像内容。
* /
public static final int METADATA_KEY_HAS_IMAGE = 26;
/ **
*如果媒体包含静止图像,则此密钥将检索该编号静止图像。
* /
public static final int METADATA_KEY_IMAGE_COUNT = 27;
/ **
*如果媒体包含静止图像,则此键将检索图像主图像的索引。
* /
public static final int METADATA_KEY_IMAGE_PRIMARY = 28;
/ **
*如果媒体包含静止图像,则此键检索宽度主图像。
* /
public static final int METADATA_KEY_IMAGE_WIDTH = 29;
/ **
*如果媒体包含静止图像,此键将检索高度主图像。
* /
public static final int METADATA_KEY_IMAGE_HEIGHT = 30;
/ **
*如果媒体包含静止图像,则此键将检索旋转主图像的角度(顺时针方向)。图像旋转角度必须是0度,90度,180度或270度之一。
* /
public static final int METADATA_KEY_IMAGE_ROTATION = 31;
/ **
*如果媒体包含视频且此密钥存在,则会检索视频序列中的总帧数。
* /
public static final int METADATA_KEY_VIDEO_FRAME_COUNT = 32;

Android开发 获取视频中的信息(例如预览图或视频时长) MediaMetadataRetriever媒体元数据检索器的更多相关文章

  1. android开发获取网络状态,wifi,wap,2g,3g.工具类(一)

    android开发获取网络状态整理: package com.gzcivil.utils; import android.content.Context; import android.net.Con ...

  2. Android开发工程师文集-Fragment,适配器,轮播图,ScrollView,Gallery 图片浏览器,Android常用布局样式

    Android开发工程师文集-Fragment,适配器,轮播图,ScrollView,Gallery 图片浏览器,Android常用布局样式 Fragment FragmentManager frag ...

  3. HTML5-video标签-实现点击预览图播放或暂停视频

    HTML5-video标签-实现点击预览图播放或暂停视频 刚刚参加工作,开始更多的接触到一些新的知识,促使我开始了解html5和css3的新特性.这时我才真的发现到html5和css3的强大. 之前关 ...

  4. 3D Touch开发全面教程之Peek and Pop - 预览和弹出

    ## 3D Touch开发全面教程之Peek and Pop - 预览和弹出 --- ### 了解3D Touch 在iPhone 6s和iPhone 6s Plus中Apple引入了3D Touch ...

  5. Android开发 - 获取Android设备的唯一标识码(Android 6.0或更高)

    在我们的APP开发中,通常需要获取到设备的唯一标识.在Android6.0之前,有很多方法我们可以方便获取到硬件的唯一标识,但是在Android6.0之后,Android系统大幅限制了我们获取设备的硬 ...

  6. android开发在adapter中使用反射添加元素

    android开发中最常用的控件之一就是listview,伴随listview还要有adapter和放入适配器的item.然后假设其中有一部分item的生成符合一定规律,Item item = new ...

  7. Android实现获取应用程序相关信息列表的方法

    本文所述为Androdi获取手机应用列表的方法,比如获取到Android应用的软件属性.大小和应用程序路径.应用名称等,获取所有已安装的Android应用列表,包括那些卸载了的,但没有清除数据的应用程 ...

  8. Android开发获取多个存储空间的路径(内置SD卡以及外置SD卡)

    Android开发中经常会遇到多存储空间的问题,包括内置存储路径以及外置SD卡,而且有的时候会有多张外置SD卡,此时就需要获取不同的SD卡路径,然后根据需要来写入或者读出文件. 此处给出常用的SD卡工 ...

  9. Android 开发 获取Android设备的屏幕高宽

    获得屏幕的宽度和高度有很多种方法: //1.通过WindowManager获取 DisplayMetrics dm = new DisplayMetrics(); heigth = dm.height ...

随机推荐

  1. NX二次开发-UFUN获取点在面上的向量方向UF_MODL_ask_face_props【转载】

    1 NX11+VS2013 2 3 4 #include <uf.h> 5 #include <uf_ui.h> 6 #include <uf_modl.h> 7 ...

  2. 良田高拍仪集成vue项目

    一.硬件及开发包说明: 产品型号为良田高拍仪S1800A3,集成b/s系统,适用现代浏览器,图片使用BASE64数据.开发包的bin文件下的video.flt文件需要和高拍仪型号的硬件id对应,这个可 ...

  3. Photon Server的Unity3D客户端配置

    Photon Server与Unity3D的交互分为3篇博文实现 (1)Photon Server的服务器端配置 (2)Photon Server的Unity3D客户端配置 (3)Photon Ser ...

  4. P1910 L国的战斗之间谍

    P1910 L国的战斗之间谍 题目背景 L国即将与I国发动战争!! 题目描述 俗话说的好:“知己知彼,百战不殆”.L国的指挥官想派出间谍前往I国,于是,选人工作就落到了你身上. 你现在有N个人选,每个 ...

  5. 微信-小程序-开发文档-服务端-模板消息:templateMessage.deleteTemplate

    ylbtech-微信-小程序-开发文档-服务端-模板消息:templateMessage.deleteTemplate 1.返回顶部 1. templateMessage.deleteTemplate ...

  6. CSS3:目录

    ylbtech-CSS3:目录 1.返回顶部 1. http://www.runoob.com/css3/css3-tutorial.html 2. 2.返回顶部   3.返回顶部   4.返回顶部 ...

  7. linux下创建oracle表空间

    来自:http://blog.sina.com.cn/s/blog_62192aed01018aep.html 1 . 登录服务器 2 . 查看磁盘空间是否够大df -h -h更具目前磁盘空间和使用情 ...

  8. JS事件 鼠标经过事件(onmouseover)鼠标经过事件,当鼠标移到一个对象上时,该对象就触发onmouseover事件,并执行onmouseover事件调用的程序。

    鼠标经过事件(onmouseover) 鼠标经过事件,当鼠标移到一个对象上时,该对象就触发onmouseover事件,并执行onmouseover事件调用的程序. 现实鼠标经过"确定&quo ...

  9. 找到你的位置(JS在页面中的位置)最常用的方式是在页面中head部分放置<script>元素,浏览器解析head部分就会执行这个代码,然后才解析页面的其余部分

    找到你的位置(JS在页面中的位置) 我们可以将JavaScript代码放在html文件中任何位置,但是我们一般放在网页的head或者body部分. 放在<head>部分 最常用的方式是在页 ...

  10. python中的 += 语法的使用

    python中有个缩略的写法,如下 a = a +1 等同于 a +=1 发现了一个有趣之处,+=的写法中间不能有空格,否则报错,测试如下 Python 3.7.1 (v3.7.1:260ec2c36 ...