1. 程式人生 > >ExifInterface 獲取照片拍攝引數(ISO,光圈,解析度等)以及MediaMetadataRetriever 獲取視訊錄製引數(時長,時間,位元速率,格式)

ExifInterface 獲取照片拍攝引數(ISO,光圈,解析度等)以及MediaMetadataRetriever 獲取視訊錄製引數(時長,時間,位元速率,格式)

深夜趕緊補一篇熱乎的文章。

才疏學淺,也是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了,傳送門。