android 多媒体文件信息,Android 获取多媒体信息
在做多媒体应用开发时,往往需要获取到多媒体文件的相关信息。
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
限制
原生的 MediaMetadataRetriever还是有不少限制的,比如支持的多媒体文件格式少,而且还不能支持网络链接的多媒体文件。
这个时候,就可以推荐使用了开源的 FFmpegMediaMetadataRetriever 库,基于 FFmpeg 开发的。使用的接口如安卓原生一致,但功能更强大了。
对于视频帧的补充
1、视频帧率
每秒显示的帧数 FPS。
2、帧数
一秒钟时间里传输的图片的量,也可以理解为图形处理器每秒钟能够刷新几次。
每一帧都是静止的图像。快速连续地显示帧便形成了运动的假象。
3、码率
在压缩视频时给这个视频指定一个参数,用以告诉压缩软件期望的压缩后的视频的大小。
比特率是指每秒传送的比特数。单位为 bps,比特率越高,传送的数据速度越快。
一起交流学习,答疑解惑,有问题,我们星球见~~~
图形/图像/音视频交流
觉得文章还不错,可以关注一下微信公众号【纸上浅谈】
android 多媒体文件信息,Android 获取多媒体信息相关推荐
- android调用在线天气服务,android通过google api获取天气信息示例
android通过google API获取天气信息 复制代码 代码如下: public class WeatherActivity extends Activity { private TextVie ...
- android开发获取手机,通过ADB获取Android手机信息,获取手机信息
通过ADB获取Android手机信息,获取手机信息 原文:https://blog.csdn.net/fasfaf454/article/details/51438743 1.获取手机系统信息( CP ...
- android自动获取天气,android通过google api获取天气信息示例
android通过google API获取天气信息 public class WeatherActivity extends Activity { private TextView txCity; p ...
- Android 12 通过 adb 获取 imei 信息
Android 12 通过 adb 获取 imei 信息 小米 E:\exe>adb shell "service call iphonesubinfo 1 | cut -c 52-6 ...
- Qt使用QMediaPlayer类获取多媒体信息
Qt自带的库中能达到获取多媒体信息效果的看来看去好像只有QMediaPlayer能达到这个效果,虽然看起来有些笨. void Player::OnMetaDataAvailableChanged(bo ...
- C#net6实现Linux系统下修改IP地址、修改系统时间、获取内存信息、获取磁盘信息、重启系统
C#net6实现Linux系统下修改IP地址.修改系统时间.获取内存信息.获取磁盘信息.重启系统 背景 项目背景 实现思路 代码实现 背景 随着微软.net core的出现,C#程序实现跨平台不在困难 ...
- Android新浪微博登陆和获取个人信息
自己总结的一些android新浪登陆和根据用户ID获取用户信息,以下代码只是写了重要的部分,详细代码可到新浪官方下载一个Demo,里面都有详细流程和各种API. Constant.java 常量类 ...
- 通过java获取手机信息_android获取手机信息
玩Android的朋友们进来看看吧! 1.获取手机安装的应用信息(排除系统自带): Java代码: 1 private String getAllApp() { 2 String result = & ...
- php获取服务器数据库信息,PHP获取服务器信息
# 获取服务器信息 ## [PHP交流群:494826865(点击群号立即加群)](https://jq.qq.com/?_wv=1027&k=50Qy5h6) >[success]在做 ...
- 怎么获取别人服务器信息失败,获取服务器信息失败
获取服务器信息失败 内容精选 换一换 1.若希望以主席身份入会,enter_code必须传入主席密码.若希望以来宾身份入会,当会议要求来宾密码时,enter_code必须传入来宾密码,会议不要求来宾密 ...
最新文章
- 面霸:Redis 为什么这么快?
- 厦门大学江保详:缺陷检测的讲解!
- 容灾管理服务器是设备还是系统,卷管理与集群建设用户容灾系统的介绍-to customer-医疗行业.doc...
- oracle动态 returning,oracle returning
- 1027:输出浮点数
- 学习搭建 Consul 服务发现与服务网格-有丰富的示例和图片
- 2008下php上传文件崩溃,php – 当用户反复尝试上传无效文件类型时,网站崩溃
- 如何得到当前浏览器是什么
- Mozilla 的 Flash 杀手 'Shumway' 已经现身
- kafka-3-故障排错
- 说不尽的 π —— π 的近似计算
- matlab经验正交分解函数EOF的实现—基于Climate Data Toolbox操作
- 【HarmonyOS】【Json解析】ZSON 与 HiJson 使用
- HTML5期末大作业:我的家乡网站设计——可以根据百度百科更换家乡适用多数我的家乡
- java正则表达式版本_java 正则表达式 版本号_java正则表达式?=.*_密码的正则表达式java...
- 用matlab对称振子E面方向图,什么天线的E面方向图 H面方向图是具体什么方向图`...
- 怎样做50+女性的生意: 渠道变革/多品牌策略催生10亿元级中老年女装品牌
- JS中的对象以及在web前端的应用
- 一个牛人给JAVA初学者的建议(很受用)
- 买的香港云服务器怎么用?云服务器使用教程