1. 程式人生 > >Android獲取視訊的關鍵幀和非關鍵幀

Android獲取視訊的關鍵幀和非關鍵幀

public Bitmap getFrameAtTime() 

//如果不加引數的話,提取第一個關鍵幀
public Bitmap getFrameAtTime() {
        return getFrameAtTime(-1, OPTION_CLOSEST_SYNC);
    }
    
getFrameAtTime引數
方法原型:public Bitmap getFrameAtTime(long timeUs, int option) 

第一個引數
是傳入擷取時間,只能是us(微秒) 
第二個引數

OPTION_CLOSEST   
在給定的時間,檢索最近一個幀,這個幀不一定是關鍵幀。

OPTION_CLOSEST_SYNC   
在給定的時間,檢索最近一個同步與資料來源相關聯的的幀(關鍵幀)。

OPTION_NEXT_SYNC  
在給定時間之後檢索一個同步與資料來源相關聯的關鍵幀。

OPTION_PREVIOUS_SYNC  
在給定時間之前檢索一個同步與資料來源相關的關鍵幀

這裡為了提取我們想要的幀,不使用關鍵幀,所以用 OPTION_CLOSEST
   /**
     * 獲取視訊檔案截圖
     *
     * @param path 視訊檔案的路徑
     * @return Bitmap 返回獲取的Bitmap
     */
    public Bitmap getVideoThumb(String path) {
        MediaMetadataRetriever media = new MediaMetadataRetriever();
        media.setDataSource(path);
        Bitmap frameAtTime = media.getFrameAtTime(1 * 1000 * 1000, MediaMetadataRetriever.OPTION_CLOSEST);
        if (frameAtTime == null) {
            frameAtTime = media.getFrameAtTime(3 * 1000 * 1000, MediaMetadataRetriever.OPTION_CLOSEST);
        }
        return frameAtTime;
    }