Android 获取多媒体信息

欢迎访问个人博客:https://glumes.com

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

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 方法可以获取到图像的字节数组,再解码到图像就好了。

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 文件任意时间点的帧图像了。

get_video_info

代码参考 Github 地址

限制

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

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

对于视频帧的补充

1、视频帧率

每秒显示的帧数 FPS。

2、帧数

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

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

3、码率

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

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

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


图形/图像/音视频交流

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

Wechat
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。