在做多媒体应用开发时,往往需要获取到多媒体文件的相关信息。

Android 提供了 MediaMetadataRetriever 类来获取输入媒体文件的帧(Frame)和元数据(Meta data)。

使用起来比较简单,所以使用范围也有限制,步骤如下:

1、声明并初始化 MediaMetadataRetriever 类。

2、设置数据源

3、获取想要的信息

MediaMetadataRetriever metadataRetriever = new MediaMetadataRetriever();

metadataRetriever.setDataSource(AUDIO_FILE);

// 获得时长

metadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)

// 获得名称

metadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE)

// 获得媒体类型

metadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_MIMETYPE)

// 获得码率

metadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE)

使用 extractMetadata 方法就能获得很多相关信息了,具体到哪些内容可以参考源码里面列举的常量。

除此之外,对于音频和视频文件还能获取其他的一些内容。

获取音频相关信息

对于音频文件,比如 MP3 文件,我们还可以获取到 MP3 的专辑图像。

byte[] imageData = metadataRetriever.getEmbeddedPicture();

try {

mBinding.audioCover.setImageBitmap(BitmapFactory.decodeByteArray(imageData, 0, imageData.length));

} catch (Exception e) {

}

使用 getEmbeddedPicture 方法可以获取到图像的字节数组,再解码到图像就好了。

9167128e048b?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

get_audio_info

获取视频的帧图像

对于视频文件,比如 MP4 文件,还可以获取到 MP4 文件的某个时刻的一帧图像。

videoFrame.setImageBitmap(metadataRetriever.getFrameAtTime(1*1000*1000, MediaMetadataRetriever.OPTION_NEXT_SYNC))

使用 getFrameAtTime 方法即可,传入具体的某个时刻的参数,第二个参数是获取帧的选项。

对于时刻参数要注意的是:单位是微秒,而不是我们常用的毫秒。而通过 extractMetadata 方法得到的多媒体文件时间长度 duration 单位却是毫秒。

对于第二个参数获取帧的选项,有如下几种:

OPTION_PREVIOUS_SYNC

OPTION_NEXT_SYNC

OPTION_CLOSEST_SYNC

OPTION_CLOSEST (性能较差)

主要差别就是在获取指定时间点前还是后。因为在指定时间点不一定有对应的帧。

用了这个方法, 就可以做到获取 MP4 文件任意时间点的帧图像了。

9167128e048b?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

get_video_info

限制

原生的 MediaMetadataRetriever还是有不少限制的,比如支持的多媒体文件格式少,而且还不能支持网络链接的多媒体文件。

这个时候,就可以推荐使用了开源的 FFmpegMediaMetadataRetriever 库,基于 FFmpeg 开发的。使用的接口如安卓原生一致,但功能更强大了。

对于视频帧的补充

1、视频帧率

每秒显示的帧数 FPS。

2、帧数

一秒钟时间里传输的图片的量,也可以理解为图形处理器每秒钟能够刷新几次。

每一帧都是静止的图像。快速连续地显示帧便形成了运动的假象。

3、码率

在压缩视频时给这个视频指定一个参数,用以告诉压缩软件期望的压缩后的视频的大小。

比特率是指每秒传送的比特数。单位为 bps,比特率越高,传送的数据速度越快。

一起交流学习,答疑解惑,有问题,我们星球见~~~

9167128e048b?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

图形/图像/音视频交流

觉得文章还不错,可以关注一下微信公众号【纸上浅谈】

9167128e048b?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

Wechat

android 多媒体文件信息,Android 获取多媒体信息相关推荐

  1. android调用在线天气服务,android通过google api获取天气信息示例

    android通过google API获取天气信息 复制代码 代码如下: public class WeatherActivity extends Activity { private TextVie ...

  2. android开发获取手机,通过ADB获取Android手机信息,获取手机信息

    通过ADB获取Android手机信息,获取手机信息 原文:https://blog.csdn.net/fasfaf454/article/details/51438743 1.获取手机系统信息( CP ...

  3. android自动获取天气,android通过google api获取天气信息示例

    android通过google API获取天气信息 public class WeatherActivity extends Activity { private TextView txCity; p ...

  4. Android 12 通过 adb 获取 imei 信息

    Android 12 通过 adb 获取 imei 信息 小米 E:\exe>adb shell "service call iphonesubinfo 1 | cut -c 52-6 ...

  5. Qt使用QMediaPlayer类获取多媒体信息

    Qt自带的库中能达到获取多媒体信息效果的看来看去好像只有QMediaPlayer能达到这个效果,虽然看起来有些笨. void Player::OnMetaDataAvailableChanged(bo ...

  6. C#net6实现Linux系统下修改IP地址、修改系统时间、获取内存信息、获取磁盘信息、重启系统

    C#net6实现Linux系统下修改IP地址.修改系统时间.获取内存信息.获取磁盘信息.重启系统 背景 项目背景 实现思路 代码实现 背景 随着微软.net core的出现,C#程序实现跨平台不在困难 ...

  7. Android新浪微博登陆和获取个人信息

    自己总结的一些android新浪登陆和根据用户ID获取用户信息,以下代码只是写了重要的部分,详细代码可到新浪官方下载一个Demo,里面都有详细流程和各种API. Constant.java   常量类 ...

  8. 通过java获取手机信息_android获取手机信息

    玩Android的朋友们进来看看吧! 1.获取手机安装的应用信息(排除系统自带): Java代码: 1 private String getAllApp() { 2 String result = & ...

  9. php获取服务器数据库信息,PHP获取服务器信息

    # 获取服务器信息 ## [PHP交流群:494826865(点击群号立即加群)](https://jq.qq.com/?_wv=1027&k=50Qy5h6) >[success]在做 ...

  10. 怎么获取别人服务器信息失败,获取服务器信息失败

    获取服务器信息失败 内容精选 换一换 1.若希望以主席身份入会,enter_code必须传入主席密码.若希望以来宾身份入会,当会议要求来宾密码时,enter_code必须传入来宾密码,会议不要求来宾密 ...

最新文章

  1. 面霸:Redis 为什么这么快?
  2. 厦门大学江保详:缺陷检测的讲解!
  3. 容灾管理服务器是设备还是系统,卷管理与集群建设用户容灾系统的介绍-to customer-医疗行业.doc...
  4. oracle动态 returning,oracle returning
  5. 1027:输出浮点数
  6. 学习搭建 Consul 服务发现与服务网格-有丰富的示例和图片
  7. 2008下php上传文件崩溃,php – 当用户反复尝试上传无效文件类型时,网站崩溃
  8. 如何得到当前浏览器是什么
  9. Mozilla 的 Flash 杀手 'Shumway' 已经现身
  10. kafka-3-故障排错
  11. 说不尽的 π —— π 的近似计算
  12. matlab经验正交分解函数EOF的实现—基于Climate Data Toolbox操作
  13. 【HarmonyOS】【Json解析】ZSON 与 HiJson 使用
  14. HTML5期末大作业:我的家乡网站设计——可以根据百度百科更换家乡适用多数我的家乡
  15. java正则表达式版本_java 正则表达式 版本号_java正则表达式?=.*_密码的正则表达式java...
  16. 用matlab对称振子E面方向图,什么天线的E面方向图 H面方向图是具体什么方向图`...
  17. 怎样做50+女性的生意: 渠道变革/多品牌策略催生10亿元级中老年女装品牌
  18. JS中的对象以及在web前端的应用
  19. 一个牛人给JAVA初学者的建议(很受用)
  20. 买的香港云服务器怎么用?云服务器使用教程

热门文章

  1. java集合的方法及使用详解
  2. Asp.Net MVC学习总结(三)——过滤器你怎么看?
  3. Vijos P1740聪明的质检员
  4. AC自动机(Aho-Corasick automation)(转)
  5. 学习SharePoint你需要什么?
  6. 2018-2019-20175203 实验二 《Java面向对象程序设计》
  7. 更改Oracle数据库的编码格式,解决导入时ORA-12899错误
  8. 几款Linux系统漏洞扫描、评估工具简介
  9. zip压缩/tar打包
  10. 【原创】k8s源代码分析-----kubelet(8)pod管理