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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353