前言

MediaMetadataRetriever是Android原生提供的获取音视频文件信息的一个类,我们可以通过这个类的相关方法获取一些基本信息,如视频时长、宽高、帧率、方向、某一帧的图片等。

初始化

MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource("");//设置视频路径

基本信息

(1)public String extractMetadata (int keyCode)
方法描述:在 setDataSource()之后调用此方法。此方法检索与键值相关联的元数据值。当前支持的键代码被列为Meta DATAXXXX常量。使用任何其他值,它返回空指针 (2)public byte[] getEmbeddedPicture ()
方法描述:在 setDataSource()之后调用此方法。此方法找到与数据源相关联的可选图形或相册/封面艺术。如果有超过一张照片,(任何)其中一个被退还 (3)public Bitmap getFrameAtTime (long timeUs, int option)
方法介绍:在SETDATABORCEL()之后调用此方法。该方法通过考虑给定的选项,在给定的时间位置找到具有代表性的帧,并将其作为位图返回。这对于生成输入数据源的缩略图或在给定的时间位置获得和显示帧是有用的。 timeUs :帧将被检索的时间位置。当在给定的时间位置检索帧时,不能保证数据源具有位于该位置的帧。当这种情况发生时,附近的一个框架将被返回。如果TimeSo为负,则将忽略时间位置和选项,并且可以将实现视为代表的任何帧返回 option:关于如何找到框架的提示。如果希望检索一个具有比TimeS更早或相同的时间戳的同步帧,请使用opthyPyviousSyc。如果希望检索一个比TimeS晚于或相同的时间戳的同步帧,请使用opthyNXTySyc。如果想检索一个同步帧,它的时间戳与TimeS最接近或相同,则使用opthyLoestStSyc。如果希望检索一个可能是或可能不是同步帧但与TimeS最接近或相同的帧,则使用OpthOffice最接近。如果没有时间同步帧,OpTestIm最常用的性能开销与其他选项相比更大 (4)public Bitmap getFrameAtTime (long timeUs)
方法介绍:在SETDATABORCEL()之后调用此方法。如果可能的话,该方法找到一个接近给定时间位置的有代表性的帧,并将其作为位图返回。这对于生成输入数据源的缩略图是有用的。如果不关心帧是如何找到的,只要它接近给定的时间,调用这个方法;否则,请调用GETFrimeTimeTime timeUs :帧将被检索的时间位置。当在给定的时间位置检索帧时,不能保证数据源具有位于该位置的帧。当这种情况发生时,附近的一个框架将被返回。如果TimeSo为负,则将忽略时间位置和选项,并且可以将实现视为代表的任何帧返回 (5)public Bitmap getFrameAtTime ()
方法介绍:在SETDATABORCEL()之后调用此方法。如果可能的话,该方法在任何时间位置找到一个有代表性的帧,并将其作为位图返回。这对于生成输入数据源的缩略图是有用的。如果不关心框架的位置,请调用此方法;否则,请调用GETFrimeTimeTime:(long)或GETFrimeTimeTime(long,int) (6)public void release ()
方法介绍:当一个对象完成时调用它。此方法释放内存内部分配的内存 (7)public void setDataSource (FileDescriptor fd, long offset, long length)方法介绍:fd 要播放的文件的文件描述符 offset 开始位置 length 结束位置 (8)public void setDataSource (String path)
方法介绍:这个方法主要是设置media类型文件的路径,包括音视频等 (9)public void setDataSource (FileDescriptor fd)
方法介绍:这个是是设置文件的描述符 (10)public void setDataSource (String uri, Map<String, String> headers)
方法介绍:设置网络音视频url地址,第二个参数是设置参数的请求头 (11)public void setDataSource (Context context, Uri uri)
方法介绍:设置网络media文件的url路径

通过MediaMetadataRetriever的extractMetadata(int keyCode)的方法即可获取一些视频的基本信息。其中,keyCode为:

(1)METADATA_KEY_ALBUM :检索数据源的专辑标题信息的元数据键。
(2)METADATA_KEY_ALBUMARTIST: 检索与数据源相关的表演者或艺术家的信息的元数据键。
(3)METADATA_KEY_ARTIST:检索有关数据源的艺术家的信息的元数据键。
(4)METADATA_KEY_AUTHOR:检索有关数据源作者的信息的元数据键 。
(5)METADATA_KEY_BITRATE:此键检索平均比特率(以比特/秒),如果可用的话。
(6)METADATA_KEY_CD_TRACK_NUMBER:元数据关键字,用于检索描述原始数据记录中音频数据源的顺序的数字字符串
(7)METADATA_KEY_COMPILATION:检索音乐专辑编辑状态的元数据键
(8)METADATA_KEY_COMPOSER:检索有关数据源的作曲家的信息的元数据键
(9)METADATA_KEY_DATE:检索或创建数据源时的日期的元数据键
(10)METADATA_KEY_DISC_NUMBER:用于检索描述音频数据源的集合的哪一部分的数字字符串的元数据键
(11)METADATA_KEY_DURATION:检索数据源回放持续时间的元数据键
(12) METADATA_KEY_GENRE:检索数据源的内容类型或类型的元数据键
(13) METADATA_KEY_HAS_AUDIO:如果存在此密钥,则媒体包含音频内容
(14)METADATA_KEY_HAS_VIDEO:如果存在此密钥,则媒体包含视频内容
(15)METADATA_KEY_LOCATION:此键检索位置信息,如果可用的话。该位置应根据ISO-6709标准,在MP4/3GP框“@ XYZ”下指定。例如,经度为90度和纬度为180度的位置将被检索为“-90+180”。
(16)METADATA_KEY_MIMETYPE:检索数据源MIME类型的元数据键。一些示例MIME类型包括:"video/mp4", "audio/mp4", "audio/amr-wb"
(17)METADATA_KEY_NUM_TRACKS:元数据键,用于检索数据源(如MP4或3GPP文件)中的音轨的数目,如音频、视频、文本。
(18)METADATA_KEY_TITLE:检索数据源标题的元数据键
(19) METADATA_KEY_VIDEO_HEIGHT:如果媒体包含视频,则该键检索其高度
(20)METADATA_KEY_VIDEO_ROTATION:此键检索视频旋转角度的程度,如果可用的话。视频旋转角度可以是0, 90, 180度,也可以是270度
(21)METADATA_KEY_VIDEO_WIDTH:如果媒体包含视频,则该密钥检索其宽度
(22)METADATA_KEY_WRITER:检索数据源的作者(如歌词作者)信息的元数据键
(23) METADATA_KEY_YEAR:检索创建或修改数据源的一年的元数据密钥
(24) OPTION_CLOSEST:此选项与GETFrimeTimeTime(long,int)一起使用,以检索与最接近或给定时间的数据源相关联的帧(不一定是关键帧)
(25)OPTION_CLOSEST_SYNC:(时间)或给定时间的数据源相关联的同步(或密钥)帧。
(26)OPTION_NEXT_SYNC:此选项与GETFrimeTimeTime(long,int)一起使用,以检索与数据源相关联的同步(或密钥)帧,该数据源位于或在给定的时间之后。
(27)OPTION_PREVIOUS_SYNC:此选项与GETFrimeTimeTime(long,int)一起使用,以检索与数据源相关联的同步(或密钥)帧,该数据源正好位于给定时间之前或给定时间

简单示例


//实例化MediaMetadataRetriever对象
MediaMetadataRetriever mmr=new MediaMetadataRetriever();
//实例化File对象,文件路径为/storage/sdcard/Movies/music1.mp4
File file=new File("/storage/sdcard/Movies/music1.mp4");
if(file.exists()){mmr.setDataSource(file.getAbsolutePath());//设置数据源为该文件对象指定的绝对路径Bitmap bitmap=mmr.getFrameAtTime();//获得视频第一帧的Bitmap对象if(bitmap!=null){imageView.setImageBitmap(bitmap);//设置ImageView显示的图片Toast.makeText(MainActivity.this, "获取视频缩略图成功", Toast.LENGTH_SHORT).show();//获取视频缩略图成功,弹出消息提示框}else{Toast.makeText(MainActivity.this, "获取视频缩略图失败", Toast.LENGTH_SHORT).show();//获取视频缩略图失败,弹出消息提示框}
}else{Toast.makeText(MainActivity.this, "文件不存在", Toast.LENGTH_SHORT).show();
//文件不存在时,弹出消息提示框
}

Android多媒体框架之MediaMetadataRetriever相关推荐

  1. android多媒体框架学习 详解

    原址 一:多媒体框架概述 jellybean 的多媒体跟以前的版本,通过对比没啥变化,最大的变化是google终于舍得给multimedia建个独立的git了(framework/av),等你好久了! ...

  2. android多媒体框架学习 详解 最新版本

    一:多媒体框架概述 jellybean 的多媒体跟以前的版本,通过对比没啥变化,最大的变化是google终于舍得给multimedia建个独立的git了(framework/av),等你好久了!也体现 ...

  3. Android 多媒体框架 OpenCore(PacketVideo)介绍

    OpenCore的另外一个常用的称呼是PacketVideo,它是Android的多媒体核心.PacketVideo是一家公司的名称,OpenCore是这套多媒体框架的软件层的名称.在Android的 ...

  4. android 多媒体框架服务之StagefrightPlayer和OMXCodec实现原理学习

    https://www.2cto.com/kf/201608/542839.html 1. 框架结构 1.1StageFright和openCore和NuPlayer的关系 上图可知,stagefri ...

  5. Android多媒体框架(二)Codec初始化及Omx组件创建

    Codec创建流程 Android提供给应用编解码的接口为MediaCodec.我们这里从NuPlayerDecoder开始分析,一是为了衔接之前将的MediaPlayer-NuPlayer流程,二是 ...

  6. android多媒体框架之流媒体----base on jellybean(八)

    从这篇开始我们将进入流媒体的环节,流媒体在 Android中有nuplayer来实现的,在开始讲解android流媒体前,我们先来讲讲流媒体传输协议,了解了基本协议,我们在看代码的过程中,就会有事半功 ...

  7. android多媒体框架介绍(五)显示图形系统之SurfaceFlinger初步介绍

    前面介绍了比较直观的framebuffer模块(负责把有一个内存地址ADDR的内容显示到屏上),hwc模块(叠加器,负责把surfaceFlinger送来的各种输入layer叠加到显存上),接下来开始 ...

  8. android多媒体框架介绍(四)显示图形系统之hwc叠加器

    前面我们讲解了整个android图形显示系统的主要模块关系,和framebuffer,接下来我们讲解hwc叠加模块. Android7.0提供了HWC和HWC2两个版本,到了Android8.0就都默 ...

  9. Android多媒体框架图

    原址 MediaPlayer框架图 Camera框架图 SoundRecorder框架图 VideoCamera框架图 OpenCore与Skia ALSA Audio框架图 Video Overla ...

最新文章

  1. Redis+Nginx+设计模式+Spring全家桶+Dubbo阿里P8技术精选文档
  2. 2019-2020中国趋势报告,203页PPT解读16大机会
  3. Hadoop学习笔记(1)
  4. 成功解决mxnet-tag\mxnet\src\operator\tensor\./matrix_op-inl.h:189: Using target_shape will be deprecated
  5. 信息系统项目管理师:第5章:项目范围管理- 章节真题+解析
  6. python 继承的规则
  7. 计算机网络学习笔记-1.2.2OSI参考模型(1)
  8. 性能测试学习05_lr(根据接口文档写脚本+参数化)
  9. 58同城笔试题:数组去重;分饼干(分糖果);最小路径和(leetcode64)
  10. SQL Server更新联接概述
  11. resultMap和resultType的整体的区别和联系
  12. chmod 更改文件的权限
  13. 调用支付宝接口 alipay.data.bill.accountlog.query,提示:ISV权限不足
  14. matlab符号运算变量替换成小数时避免出现分数的小技巧
  15. android 写字板_微软正在Windows 10上的写字板中测试广告
  16. 算笔账:阿里巴巴股票买不买
  17. linux那些事之page fault(do_fault)(5)
  18. TP4056 充电电路学习借鉴
  19. 如何高效地做设计评审
  20. 关于企业上云,我们想跟你聊聊!|中机智库

热门文章

  1. matlab pdist函数官方详解
  2. 分布式协议基础http协议
  3. 在Heroku上扩展ipify服务
  4. RocketMQ的原理与实践
  5. IT管理人员需要更加了解数据中心冷却情况
  6. scrapy中的下载器中间件
  7. scala break continue
  8. [iOS] 在UIToolBar中增加UILabel等控件(xib/storyboard图形界面方式)
  9. Strategy模式与Delegate委托
  10. 第一次现场看球,第一次场看国家队打球,第一次场看国家队打架,第一次上电视,第... ......