前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Android 获取多媒体信息

Android 获取多媒体信息

作者头像
音视频开发进阶
发布2019-07-26 14:33:34
发布2019-07-26 14:33:34
2.3K00
代码可运行
举报
运行总次数:0
代码可运行

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

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

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

1、声明并初始化 MediaMetadataRetriever 类。 2、设置数据源 3、获取想要的信息

代码语言:javascript
代码运行次数:0
运行
复制
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 的专辑图像。

代码语言:javascript
代码运行次数:0
运行
复制
    byte[] imageData = metadataRetriever.getEmbeddedPicture();
   try {
       mBinding.audioCover.setImageBitmap(BitmapFactory.decodeByteArray(imageData, 0, imageData.length));
   } catch (Exception e) {
   }

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

获取视频的帧图像

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

代码语言:javascript
代码运行次数:0
运行
复制
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 文件任意时间点的帧图像了。

代码参考 Github 地址

限制

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

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

对于视频帧的补充

1、视频帧率

每秒显示的帧数 FPS。

2、帧数

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

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

3、码率

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-12-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 纸上浅谈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 获取音频相关信息
  • 获取视频的帧图像
  • 限制
  • 对于视频帧的补充
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档