深夜赶紧补一篇热乎的文章。
才疏学浅,也是Google 好久才找到2个关键的 API。
MediaMetadataRetriever 和 ExifInterface,大佬可以直接跳过下面文章,直接去看源码。
一: MediaMetadataRetriever 针对 视频和 音频文件。根据文件地址就可以获取读取多媒体文件信息(视频/音频包含的标题、格式、艺术家等信息),接口MediaMetadataRetriever解析媒体文件、获取媒体文件中取得帧和元数据。
我也不多说作用,只在这里将参数信息翻译出来,知道作用你想怎么搞就怎么搞!
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(path);
//获得媒体专辑的标题
String ablumString = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM);
//获取媒体的艺术家信息
String artistString = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
//获取媒体标题信息
String titleString = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
//获取媒体类型
String mimetypeString = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_MIMETYPE);
//获取媒体持续时间
String durationString = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
//获取媒体比特率,位率
String bitrateString = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE);
//获取媒体的日期
String dateString = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DATE);
//如果媒体包含视频,这个键就会检索它的宽度。
String video_width = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH);
//如果媒体包含视频,这个键就会检索它的高度。
String video_height = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT);
//元数据键,用于检索歌曲的数量,如音频、视频、文本,在数据源中,如mp4或3gpp文件。
String NUM_TRACKS = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_NUM_TRACKS);
//检索数字字符串的元数据键,该字符串描述了音频数据源的哪个部分来自于
String DISC_NUMBER = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DISC_NUMBER);
//表演者或艺术家的信息。
String ALBUMARTIST = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUMARTIST);
//作者
String AUTHOR = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_AUTHOR);
//元数据键检索在原始记录中描述音频数据源的顺序的数字字符串。
String CD_TRACK_NUMBER = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_CD_TRACK_NUMBER);
//帧速率
String CAPTURE_FRAMERATE = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_CAPTURE_FRAMERATE);
//检索音乐专辑编译状态的元数据键。
String COMPILATION = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_COMPILATION);
//元数据键检索关于数据源的composer的信息
String COMPOSER = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_COMPOSER);
//获取数据源的内容类型或类型的元数据键。
String GENRE = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_GENRE);
//如果这个键存在,那么媒体就包含了音频内容。
String HAS_AUDIO = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_HAS_AUDIO);
//如果这个密钥存在,那么媒体就包含了视频内容。。
String HAS_VIDEO = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_HAS_VIDEO);
//如果可用,此键将检索位置信息。
String LOCATION = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_LOCATION);
//如果有的话,这个键可以获取视频旋转角度的角度。
String VIDEO_ROTATION = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
//元数据键,用于检索数据源的写入器(如lyriwriter)的信息。
String WRITER = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_WRITER);
//元数据键,用于检索数据源创建或修改时的年份。
String YEAR = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_YEAR);
//此选项用于getFrameAtTime(long、int),以检索与最近(在时间)或给定时间最接近的数据源相关联的同步(或键)框架。
String CLOSEST_SYNC = mmr.extractMetadata(MediaMetadataRetriever.OPTION_CLOSEST_SYNC);
//该选项用于getFrameAtTime(long、int),用于检索与最近或给定时间最接近的数据源相关的帧(不一定是关键帧)。
String CLOSEST = mmr.extractMetadata(MediaMetadataRetriever.OPTION_CLOSEST);
//这个选项用于getFrameAtTime,以检索与在给定时间之前或在给定时间内的数据源相关联的同步(或键)框架。
String PREVIOUS_SYNC = mmr.extractMetadata(MediaMetadataRetriever.OPTION_PREVIOUS_SYNC);
2.ExifInterface 图片信息获取,这个真的很强大,能满足基本需求。Exif是一种图像文件格式,实际上Exif格式就是在JPEG格式头部插入了数码照片的信息,包括拍摄时的光圈、快门、白平衡、ISO、焦距、日期时间等各种和拍摄条件以及相机品牌、型号、色彩编码、拍摄时录制的声音以及GPS全球定位系统数据、缩略图等。
//很简单,传入源文件地址就可以
ExifInterface exifInterface = new ExifInterface(localMediaInfoBean.media_path);
String longitude = exifInterface.getAttribute(ExifInterface.TAG_GPS_LONGITUDE);
String latitude = exifInterface.getAttribute(ExifInterface.TAG_GPS_LATITUDE);
String length = exifInterface.getAttribute(ExifInterface.TAG_IMAGE_LENGTH);
String width = exifInterface.getAttribute(ExifInterface.TAG_IMAGE_WIDTH);
String aperture = exifInterface.getAttribute(ExifInterface.TAG_APERTURE);//光圈
String iso = exifInterface.getAttribute(ExifInterface.TAG_ISO);//ISO
String balance = exifInterface.getAttribute(ExifInterface.TAG_WHITE_BALANCE);//白平衡
String exposure = exifInterface.getAttribute(ExifInterface.TAG_EXPOSURE_TIME);//曝光时间
String foch_length = exifInterface.getAttribute(ExifInterface.TAG_FOCAL_LENGTH);//焦距
String gps_altitude_ref = exifInterface.getAttribute(ExifInterface.TAG_GPS_ALTITUDE_REF);//海拔高度
String device_type = exifInterface.getAttribute(ExifInterface.TAG_MODEL);//
其实ExifInterface还提供了其它方法。
exifInterface.getAltitude(long default); //返回海拔高度,单位米,如果exif的tag不存在,返回默认值。exifInterface.getAttributeDouble(String tag, Double default) //返回double值,传入默认值exifInterface.getAttributeInt(String tag, int default) //返回int值,传入默认值exifInterface.getLatLong(float[] value) //返回纬度和经度,数组第一个是纬度,第二个是经度
ExifInterface.TAG_ORIENTATION //旋转角度,整形表示,在ExifInterface中有常量对应表示
ExifInterface.TAG_DATETIME //拍摄时间,取决于设备设置的时间
ExifInterface.TAG_MAKE //设备品牌
ExifInterface.TAG_MODEL //设备型号,整形表示,在ExifInterface中有常量对应表示
ExifInterface.TAG_FLASH //闪光灯
ExifInterface.TAG_IMAGE_LENGTH //图片高度
ExifInterface.TAG_IMAGE_WIDTH //图片宽度
ExifInterface.TAG_GPS_LATITUDE //纬度
ExifInterface.TAG_GPS_LONGITUDE //经度
ExifInterface.TAG_GPS_LATITUDE_REF //纬度名(N or S)
ExifInterface.TAG_GPS_LONGITUDE_REF //经度名(E or W)
ExifInterface.TAG_EXPOSURE_TIME //曝光时间
ExifInterface.TAG_APERTURE //光圈值
ExifInterface.TAG_ISO //ISO感光度
ExifInterface.TAG_DATETIME_DIGITIZED //数字化时间
ExifInterface.TAG_SUBSEC_TIME //
ExifInterface.TAG_SUBSEC_TIME_ORIG //
ExifInterface.TAG_SUBSEC_TIME_DIG //
ExifInterface.TAG_GPS_ALTITUDE //海拔高度
ExifInterface.TAG_GPS_ALTITUDE_REF //海拔高度
ExifInterface.TAG_GPS_TIMESTAMP //时间戳
ExifInterface.TAG_GPS_DATESTAMP //日期戳
ExifInterface.TAG_WHITE_BALANCE //白平衡
ExifInterface.TAG_FOCAL_LENGTH //焦距
ExifInterface.TAG_GPS_PROCESSING_METHOD //用于定位查找的全球定位系统处理方法。
这里的一些用法不是我自己探索出来的,是来自别人的博客,我也是稍微整理下,毕竟同时获取
视频,
音频,
图片的参数信息 ,是一站式的。都不是独立而去开发的使用的。
以上是ExifInterface 读取能力,通过查看发现ExifInterface 还有写入功能。我就不Copy了,传送门。
http://blog.csdn.net/u011002668/article/details/51490712