Android開發 獲取視頻中的信息(例如預覽圖或視頻時長)

前言

  在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;
相關文章
相關標籤/搜索