ExifInterface 獲取照片拍攝引數(ISO,光圈,解析度等)以及MediaMetadataRetriever 獲取視訊錄製引數(時長,時間,位元速率,格式)
阿新 • • 發佈:2018-12-11
深夜趕緊補一篇熱乎的文章。
才疏學淺,也是Google 好久才找到2個關鍵的 API。
MediaMetadataRetriever 和 ExifInterface,大佬可以直接跳過下面文章,直接去看原始碼。
一: MediaMetadataRetriever 針對 視訊和 音訊檔案。根據檔案地址就可以獲取讀取多媒體檔案資訊(視訊/音訊包含的標題、格式、藝術家等資訊),介面MediaMetadataRetriever解析媒體檔案、獲取媒體檔案中取得幀和元資料。
我也不多說作用,只在這裡將引數資訊翻譯出來,知道作用你想怎麼搞就怎麼搞!
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(path);
2.ExifInterface 圖片資訊獲取,這個真的很強大,能滿足基本需求。Exif是一種影象檔案格式,實際上Exif格式就是在JPEG格式頭部插入了數碼照片的資訊,包括拍攝時的光圈、快門、白平衡、ISO、焦距、日期時間等各種和拍攝條件以及相機品牌、型號、色彩編碼、拍攝時錄製的聲音以及GPS全球定位系統資料、縮圖等。//獲得媒體專輯的標題 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);
//很簡單,傳入原始檔地址就可以 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