Android多媒体信息获取
2019-05-12 本文已影响0人
DASH_1024
Android开发中,常常需要获取本地或者网络多媒体的一些基本信息。MediaMetadataRetriever类位于android.media包下,提供了用于从输入媒体文件检索帧和元数据的统一接口,可以很方便实现这些功能。
基本常量
METADATA_KEY_ALBUM :检索数据源的专辑标题信息的元数据键。
METADATA_KEY_ALBUMARTIST: 检索与数据源相关的表演者或艺术家的信息的元数据键。
METADATA_KEY_ARTIST:检索有关数据源的艺术家的信息的元数据键。
METADATA_KEY_AUTHOR:检索有关数据源作者的信息的元数据键
METADATA_KEY_BITRATE:此键检索平均比特率(以比特/秒),如果可用的话。
METADATA_KEY_CD_TRACK_NUMBER:元数据关键字,用于检索描述原始数据记录中音频数据源的顺序的数字字符串。
METADATA_KEY_COMPILATION:检索音乐专辑编辑状态的元数据键
METADATA_KEY_COMPOSER:检索有关数据源的作曲家的信息的元数据键
METADATA_KEY_DATE:检索或创建数据源时的日期的元数据键
METADATA_KEY_DISC_NUMBER:用于检索描述音频数据源的集合的哪一部分的数字字符串的元数据键
METADATA_KEY_DURATION:检索数据源回放持续时间的元数据键
METADATA_KEY_GENRE:检索数据源的内容类型或类型的元数据键
METADATA_KEY_HAS_AUDIO:如果存在此密钥,则媒体包含音频内容
METADATA_KEY_HAS_VIDEO:如果存在此密钥,则媒体包含视频内容
METADATA_KEY_MIMETYPE:检索数据源MIME类型的元数据键。一些示例MIME类型包括:"video/mp4", "audio/mp4", "audio/amr-wb"
METADATA_KEY_NUM_TRACKS:元数据键,用于检索数据源(如MP4或3GPP文件)中的音轨的数目,如音频、视频、文本。
METADATA_KEY_TITLE:检索数据源标题的元数据键
METADATA_KEY_VIDEO_HEIGHT:如果媒体包含视频,则该键检索其高度
METADATA_KEY_VIDEO_ROTATION:此键检索视频旋转角度的程度,如果可用的话。视频旋转角度可以是0, 90, 180度,也可以是270度
METADATA_KEY_VIDEO_WIDTH:如果媒体包含视频,则该密钥检索其宽度
METADATA_KEY_WRITER:检索数据源的作者(如歌词作者)信息的元数据键
METADATA_KEY_YEAR:检索创建或修改数据源的一年的元数据密钥
OPTION_CLOSEST:此选项与GETFrimeTimeTime(long,int)一起使用,以检索与最接近或给定时间的数据源相关联的帧(不一定是关键帧)
OPTION_CLOSEST_SYNC:(时间)或给定时间的数据源相关联的同步(或密钥)帧。
获取视频的第一帧图片
public static Bitmap getBitmap(Context context,String url, boolean isSD) {
Bitmap bitmap = null;
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
try {
if (isSD){
retriever.setDataSource(context, Uri.fromFile(new File(url)));
}else {
retriever.setDataSource(url, new HashMap());
}
bitmap = retriever.getFrameAtTime();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} finally {
retriever.release();
}
return bitmap;
}
本例中提供了获取本地视频和网络视频第一帧图片的功能,首先初始化MediaMetadataRetriever,如果是本地视频设置数据源时通过 Uri.fromFile()转化为Uri对象,再通过MediaMetadataRetriever的getFrameAtTime()方法默认获取第一帧图片。如果是网络视频直接将url设置为数据源即可。
获取视频时长和宽高
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
try {
if (mUri != null) {
HashMap<String, String> headers = null;
if (headers == null) {
headers = new HashMap<String, String>();
headers.put("User-Agent", "Mozilla/5.0 (Linux; U; Android 8.0; zh-CN;
MW-KW-001 Build/JRO03C) AppleWebKit/533.1 (KHTML, like Gecko)
Version/4.0 UCBrowser/1.0.0.001 U4/0.8.0 Mobile Safari/533.1");
}
mmr.setDataSource(mUri, headers);
}
String duration = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);//时长(毫秒)
String width = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH);//宽
String height = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT);//高
} catch (Exception ex) {
Log.e("TAG", "MediaMetadataRetriever exception " + ex);
} finally {
mmr.release();
}