在Android裏獲取視頻的信息主要依靠MediaMetadataRetriever實現app
所謂的最佳就是MediaMetadataRetriever本身計算的ide
/** * 獲取視頻縮略圖 * @param vedioFile * @return */ public static Bitmap getVedioThumbnail(File vedioFile){ if (!vedioFile.exists()){ L.e("視頻文件不存在"); return null; } MediaMetadataRetriever retriever = new MediaMetadataRetriever(); retriever.setDataSource(vedioFile.getAbsolutePath()); Bitmap bitmap = retriever.getFrameAtTime(); return bitmap; }
若是你的視頻文件是在assets文件裏spa
AssetFileDescriptor adf = context.getAssets().openFd(vedioFile.getAbsolutePath());//若是是app assets目錄的視頻文件 retriever.setDataSource(adf.getFileDescriptor());
/** * 獲取視頻縮略圖 * @param vedioFile * @return */ public static Bitmap getVedioThumbnail(File vedioFile){ if (!vedioFile.exists()){ L.e("視頻文件不存在"); return null; } MediaMetadataRetriever retriever = new MediaMetadataRetriever(); retriever.setDataSource(vedioFile.getAbsolutePath()); Bitmap bitmap = retriever.getFrameAtTime(1000);//參數爲毫秒,就是返回靠近這個時間的幀圖 return bitmap; }
/** * 返回視頻播放總時長 * @param vedioFile * @return */ public static Long getVedioTotalTime(File vedioFile){ if (!vedioFile.exists()){ L.e("視頻文件不存在"); return null; } MediaMetadataRetriever retriever = new MediaMetadataRetriever(); retriever.setDataSource(vedioFile.getAbsolutePath()); String timeString = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); Long time = Long.valueOf(timeString); return time; }
/ ** *元數據鍵,用於檢索描述的數字字符串 *原始錄音中音頻數據源的順序。 * / public static final int METADATA_KEY_CD_TRACK_NUMBER = 0; / ** 元數據鍵,用於檢索有關專輯標題的信息數據源。 * / public static final int METADATA_KEY_ALBUM = 1; / ** 元數據鍵,用於檢索有關藝術家的信息數據源。 * / public static final int METADATA_KEY_ARTIST = 2; / ** 元數據鍵,用於檢索有關做者的信息數據源。 * / public static final int METADATA_KEY_AUTHOR = 3; / ** 元數據鍵,用於檢索有關做曲家的信息數據源。 * / public static final int METADATA_KEY_COMPOSER = 4; / ** 用於檢索建立數據源的日期的元數據鍵或修改。 * / public static final int METADATA_KEY_DATE = 5; / ** 元數據鍵,用於檢索數據的內容類型或類型資源。 * / public static final int METADATA_KEY_GENRE = 6; / ** 用於檢索數據源標題的元數據鍵。 * / public static final int METADATA_KEY_TITLE = 7; / ** 元數據鍵,用於檢索建立數據源的年份或修改。 * / public static final int METADATA_KEY_YEAR = 8; / ** 元數據鍵,用於檢索數據源的播放持續時間。 * / public static final int METADATA_KEY_DURATION = 9; / ** 用於檢索音軌數量的元數據鍵,例如音頻,視頻,文本,在數據源中,如mp4或3gpp文件。 * / public static final int METADATA_KEY_NUM_TRACKS = 10; / ** 用於檢索做者信息的元數據鍵(例如詞做者)的數據源。 * / public static final int METADATA_KEY_WRITER = 11; / ** *於檢索數據源的mime類型的元數據鍵。一些 示例mime類型包括:「video / mp4」,「audio / mp4」,「audio / amr-wb」,等 * / public static final int METADATA_KEY_MIMETYPE = 12; / ** 元數據鍵,用於檢索有關表演者的信息 與數據源關聯的藝術家。 * / public static final int METADATA_KEY_ALBUMARTIST = 13; / ** 元數據鍵,用於檢索描述哪一個的數字字符串 音頻數據源來自的一部分。 * / public static final int METADATA_KEY_DISC_NUMBER = 14; / ** 用於檢索音樂專輯編輯狀態的元數據鍵。 * / public static final int METADATA_KEY_COMPILATION = 15; / ** *若是此密鑰存在,則媒體包含音頻內容。 * / public static final int METADATA_KEY_HAS_AUDIO = 16; / ** 若是此密鑰存在,則媒體包含視頻內容。 * / public static final int METADATA_KEY_HAS_VIDEO = 17; / ** 若是媒體包含視頻,此密鑰將檢索其寬度。 * / public static final int METADATA_KEY_VIDEO_WIDTH = 18; / ** 若是媒體包含視頻,此密鑰將檢索其高度。 * / public static final int METADATA_KEY_VIDEO_HEIGHT = 19; / ** *此密鑰檢索平均比特率(以位/秒爲單位)(若是可用)。 * / public static final int METADATA_KEY_BITRATE = 20; / ** 此鍵檢索文本軌道的語言代碼(若是有)。若是存在多個文本軌跡,則返回值將以下所示: * / public static final int METADATA_KEY_TIMED_TEXT_LANGUAGES = 21; / ** 若是此密鑰存在,則媒體受到保護。 * / public static final int METADATA_KEY_IS_DRM = 22; / ** 此密鑰檢索位置信息(若是有)。 位置應根據ISO-6709標準指定一個mp4 / 3gp的盒子「@xyz」。經度爲-90度和緯度的位置 例如,180度的將被檢索爲「-90.0000 + 180.0000」。 * / public static final int METADATA_KEY_LOCATION = 23; / ** 此鍵以度爲單位檢索視頻旋轉角度(若是可用)。 視頻旋轉角度能夠是0度,90度,180度或270度。 * / public static final int METADATA_KEY_VIDEO_ROTATION = 24; / ** *此鍵檢索原始捕獲幀速率(若是是)可用。捕獲幀率將是一個浮點號碼。 * / public static final int METADATA_KEY_CAPTURE_FRAMERATE = 25; / ** 若是此鍵存在,則媒體包含靜止圖像內容。 * / public static final int METADATA_KEY_HAS_IMAGE = 26; / ** *若是媒體包含靜止圖像,則此密鑰將檢索該編號靜止圖像。 * / public static final int METADATA_KEY_IMAGE_COUNT = 27; / ** *若是媒體包含靜止圖像,則此鍵將檢索圖像主圖像的索引。 * / public static final int METADATA_KEY_IMAGE_PRIMARY = 28; / ** *若是媒體包含靜止圖像,則此鍵檢索寬度主圖像。 * / public static final int METADATA_KEY_IMAGE_WIDTH = 29; / ** *若是媒體包含靜止圖像,此鍵將檢索高度主圖像。 * / public static final int METADATA_KEY_IMAGE_HEIGHT = 30; / ** *若是媒體包含靜止圖像,則此鍵將檢索旋轉主圖像的角度(順時針方向)。圖像旋轉角度必須是0度,90度,180度或270度之一。 * / public static final int METADATA_KEY_IMAGE_ROTATION = 31; / ** *若是媒體包含視頻且此密鑰存在,則會檢索視頻序列中的總幀數。 * / public static final int METADATA_KEY_VIDEO_FRAME_COUNT = 32;