ExifInterface 获取照片拍摄参数(ISO,光圈,分辨率等)以及MediaMetadataRetriever 获取视频录制参数(时长,时间,码率,格式)

版权声明:本博客为博主原创,欢迎大佬批评指点! https://blog.csdn.net/qq_31332467/article/details/79166945

深夜赶紧补一篇热乎的文章。

才疏学浅,也是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






猜你喜欢

转载自blog.csdn.net/qq_31332467/article/details/79166945