前言
记录一下Android中获取文件或音视频文件中的mimetype,简单记录一下,方便自己查阅。
正文
下面大概介绍3中,第一个是针对文件获取mimetype来说的,第二个和第三个是针对音视频获取mimetype来说的。
当然,可能获取的mimetype不一定相同,只作为一定的参考。
第一种
》整理过。
private static void getAudioMimeType2(String path){ //获取文件后缀扩展 String extension = extractFileExtension(path); //根据后缀进行获取mimeType if (null != extension) { String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension.toLowerCase(Locale.ROOT)); } } public static String extractFileExtension(String data) { if (data == null) return null; data = extractDisplayName(data); int lastDot = -1; if (null != data) { lastDot = data.lastIndexOf('.'); } if (lastDot == -1) { return null; } else { return data.substring(lastDot + 1); } } public static String extractDisplayName(String data) { if (data == null) return null; if (data.indexOf('/') == -1) { return data; } if (data.endsWith("/")) { data = data.substring(0, data.length() - 1); } return data.substring(data.lastIndexOf('/') + 1); }
第二种
这种就是开始针对音频,视频,图片来说了。
mMediaMetadataRetriever = new MediaMetadataRetriever(); mMediaMetadataRetriever.setDataSource(file.getPath()); mimeType = mMediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_MIMETYPE);
可以看《》相关介绍。
MediaMetadataRetriever还可以解析很多信息,但不一定准确。
比如解析视频时的高宽,这里解析的不一定对的,还是需要通过MediaPlayer播放时底层上播的高宽为准。
第三种
这种就针对播放的音频和视频来说啦。一般底层播放时通过这个解析,然后选择对应的解码器解析。
try { MediaExtractor mediaExtractor = new MediaExtractor(); mediaExtractor.setDataSource(path); int count = mediaExtractor.getTrackCount(); if (count > 0) { for (int i = 0; i < count; i++) { Log.d(TAG, "getTrackFormat all info : " + mediaExtractor.getTrackFormat(i)); Log.d(TAG, "mimeType : " + mediaExtractor.getTrackFormat(i).getString("mime")); } } } catch (Exception e) { e.printStackTrace(); }
这里获取存在的轨道流存在多个(count>0),比如视频或音频至少一个,也就是音频轨道和视频轨道流,也可能存在多个。比如
mimeType : video/dolby-vision mimeType : video/hevc mimeType : audio/mp4a-latm mimeType : application/octet-stream mimeType : application/octet-stream mimeType : application/octet-stream
小结
这三种解析mimetype存在不一样,这里以多媒体测试为例哈。
path : /sdcard/Media/sdd.m4a 第一种 mimeType : audio/mpeg 第二种 mimeType : audio/mp4 第三种 mimeType : audio/alac
也就是解析存在差异。
-
第一种是针对所有文件,解析文件类型mimetype;
-
第二种是针对音乐视频和图片,解析一些信息(mimetype,高宽等信息);
-
第三种是针对音乐和视频来说的解析使用哪里轨道格式(编码格式方式);
参考文章
-
《MediaProvider源码》
-
《》
-
《
历史上的今天
暂无评论...
随机推荐
[摘]Android IO流读写文件
一、概念文件在程序中是以流的形式来操作的。流:是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两个存储位置之间的传输称为流。流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。二、分类1、按照流向划分:输入流、输出流以内存为参照:输...
AAR文件转JAR文件的方法
什么是AARAAR(Android Archive)包是一个Android库项目的二进制归档文件。文件扩展名是.aar,但文件本身是具有以下条目的一个简单zip文件:/AndroidManifest.xml (强制)/classes.jar (强制)/res/ (强制)/R.t...
记录Ubuntu更新命令
前言简单的记录一下Ubuntu更新命令,方便自己查阅。流水账一篇。正文更新系统sudo apt update && sudo apt upgrade -y搜索包apt-cache search package获取包的相关信息apt-cache show packa...
丰子恺:渐
不为“渐”所迷,不为造物所欺,而收缩无限的时间并空间于方寸的心中。故佛家能纳须弥于芥子。使人生圆滑进行的微妙的要素,莫如“渐”;造物主骗人的手段,也莫如“渐”。在不知不觉之中,天真烂漫的孩子“渐渐”变成野心勃勃的青年;慷慨豪侠的青年“渐渐”变成冷酷的成人;血气旺盛的成人“渐渐”变成顽固的老头子。因为...
我常用的Monkey命令
Monkey的概念“猴子测试”是指没有测试经验的人甚至对计算机根本不了解的人(就像猴子一样)不需要知道程序的任何用户交互方面的知识,如果给他一个程序,他就会针对他看到的界面进行操作,其操作是无目的的、乱点乱按的。这种测试方式在产品周期中的早期阶段会找到很多很好的bug,为用户节省不少的时间。...
[摘]BAT脚本如何自动执行 adb shell 以后的命令
需求说明BAT脚本中执行adb shell 命令后,需要获取其返回的结果。adb shell ps | grep com.125la.test我想返回打印的值参考代码@echo offecho su > temp.txtecho 其它命令 >> temp.txt...