欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

android 獲取視頻第一幀作為縮略圖的方法

 更新時間:2019年08月16日 16:23:22   作者:暴走鄰家  
這篇文章主要介紹了android 獲取視頻第一幀作為縮略圖的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

今天,簡單講講android里如何獲取一個視頻文件的第一幀作為縮略圖顯示在界面上。

之前,我說個最近需要從服務(wù)器下載視頻文件,但是下載后肯定需要顯示視頻的縮略圖在界面上給用戶看,于是想到顯示視頻的第一幀作為縮略圖。但是我不知道具體怎么寫,于是在網(wǎng)上查找資料,最終是解決了問題。這里記錄一下。

一.使用MediaMetadataRetriever獲取視頻的第一幀作為縮略圖

/** 
* 獲取視頻文件截圖 
* 
* @param path 視頻文件的路徑 
* @return Bitmap 返回獲取的Bitmap 
*/
 
public static Bitmap getVideoThumb(String path) { 
 
MediaMetadataRetriever media = new MediaMetadataRetriever(); 
 
media.setDataSource(path); 
 
return media.getFrameAtTime(); 
 
} 

這里需要注意一點,從API 10開始新增一類MediaMetadataRetriever可以用來獲取媒體文件的信息,可以獲取視頻任何一幀的縮略圖。所以使用MediaMetadataRetriever的API最小為10.

這里還列舉一下MediaMetadataRetriever獲取視頻的其他幾個函數(shù):

//獲取第一幀原尺寸圖片
mmrc.getFrameAtTime();
 
//獲取指定位置的原尺寸圖片 注意這里傳的timeUs是微秒
mmrc.getFrameAtTime(timeUs, option);
 
//獲取指定位置指定寬高的縮略圖
mmrc.getScaledFrameAtTime(timeUs, MediaMetadataRetrieverCompat.OPTION_CLOSEST, width, height);
 
//獲取指定位置指定寬高并且旋轉(zhuǎn)的縮略圖
mmrc.getScaledFrameAtTime(timeUs, MediaMetadataRetrieverCompat.OPTION_CLOSEST, width, height, rotate);

這里簡單講講,media.getFrameAtTime()實際上也是調(diào)用mmrc.getFrameAtTime(-1, OPTION_CLOSEST_SYNC );即獲取從-1秒后最近位置的關(guān)鍵幀,其實就是第一幀數(shù)據(jù)。下面簡單說一下public Bitmap getFrameAtTime(long timeUs, int option):

public Bitmap getFrameAtTime(long timeUs, int option) 第一個參數(shù)是傳入時間,只能是us(微秒) ,當(dāng)時我傳入的ms,獲取的總是第一幀,所以這個問題都弄了好久。

然后是第二個參數(shù),先看看官方解釋:

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

OPTION_CLOSEST_SYNC    在給定的時間,檢索最近一個同步與數(shù)據(jù)源相關(guān)聯(lián)的的幀(關(guān)鍵幀)。

OPTION_NEXT_SYNC  在給定時間之后檢索一個同步與數(shù)據(jù)源相關(guān)聯(lián)的關(guān)鍵幀。

OPTION_PREVIOUS_SYNC   顧名思義,同上

二.使用ThumbnailUtils獲取視頻的第一幀作為縮略圖

/**
   * 獲取視頻的縮略圖
   * 先通過ThumbnailUtils來創(chuàng)建一個視頻的縮略圖,然后再利用ThumbnailUtils來生成指定大小的縮略圖。
   * 如果想要的縮略圖的寬和高都小于MICRO_KIND,則類型要使用MICRO_KIND作為kind的值,這樣會節(jié)省內(nèi)存。
   * @param videoPath 視頻的路徑
   * @param width 指定輸出視頻縮略圖的寬度
   * @param height 指定輸出視頻縮略圖的高度度
   * @param kind 參照MediaStore.Images(Video).Thumbnails類中的常量MINI_KIND和MICRO_KIND。
   *      其中,MINI_KIND: 512 x 384,MICRO_KIND: 96 x 96
   * @return 指定大小的視頻縮略圖
   */
  public static Bitmap getVideoThumbnail(String videoPath, int width, int height,int kind) {
    Bitmap bitmap = null;
    // 獲取視頻的縮略圖
    bitmap = ThumbnailUtils.createVideoThumbnail(videoPath, kind); //調(diào)用ThumbnailUtils類的靜態(tài)方法createVideoThumbnail獲取視頻的截圖;
    if(bitmap!= null){
      bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,
          ThumbnailUtils.OPTIONS_RECYCLE_INPUT);//調(diào)用ThumbnailUtils類的靜態(tài)方法extractThumbnail將原圖片(即上方截取的圖片)轉(zhuǎn)化為指定大小;
    }
    return bitmap;
  }

簡單講講,這個其實很簡單,就是調(diào)用ThumbnailUtils.createVideoThumbnail(path, kind)獲取第一幀數(shù)據(jù),然后通過bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height, ThumbnailUtils.OPTIONS_RECYCLE_INPUT);將圖片轉(zhuǎn)成指定大小。

下面還列舉如何將bitmap保存到文件,因為獲取到視頻的縮略圖后,可能需要保存到本地,下次進入app時可以直接查看。

/** 
* Bitmap保存成File 
* 
* @param bitmap input bitmap 
* @param name output file's name 
* @return String output file's path 
*/
 
public static String bitmap2File(Bitmap bitmap, String name) { 
 
File f = new File(Environment.getExternalStorageDirectory() + name + ".jpg"); 
 
if (f.exists()) f.delete(); 
 
FileOutputStream fOut = null; 
 
try { 
 
fOut = new FileOutputStream(f); 
 
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOut); 
 
fOut.flush(); 
 
fOut.close(); 
 
} catch (IOException e) { 
 
return null; 
 
} 
 
return f.getAbsolutePath(); 
 
}

android 獲取視頻第一幀作為縮略圖就講完了。

就這么簡單。以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android實現(xiàn)圓形純數(shù)字按鈕

    Android實現(xiàn)圓形純數(shù)字按鈕

    這篇文章主要為大家詳細介紹了Android實現(xiàn)圓形純數(shù)字按鈕,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • 屏蔽RecyclerView單邊滑動到頭陰影(fadingEdge)的方法

    屏蔽RecyclerView單邊滑動到頭陰影(fadingEdge)的方法

    這篇文章主要給大家介紹了如何屏蔽RecyclerView單邊滑動到頭陰影(fadingEdge)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • Android實現(xiàn)網(wǎng)頁圖片瀏覽功能

    Android實現(xiàn)網(wǎng)頁圖片瀏覽功能

    這篇文章主要為大家詳細介紹了Android實現(xiàn)網(wǎng)頁圖片瀏覽功能,輸入圖片的url然后點擊按鈕加載出來圖片,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Android實現(xiàn)QQ登錄界面遇到問題及解決方法

    Android實現(xiàn)QQ登錄界面遇到問題及解決方法

    本文給大家介紹android仿qq登錄界面的實現(xiàn)代碼,在實現(xiàn)此功能過程中遇到各種問題,但是最終都順利解決,如果大家對android qq登錄界面實現(xiàn)方法感興趣的朋友一起學(xué)習(xí)吧
    2016-09-09
  • Flutter路由框架Fluro使用簡介

    Flutter路由框架Fluro使用簡介

    這篇文章主要介紹了Flutter路由框架Fluro使用簡介,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Android 實現(xiàn)自定義圓形進度條的功能

    Android 實現(xiàn)自定義圓形進度條的功能

    這篇文章主要介紹了Android 實現(xiàn)自定義圓形進度條的功能的相關(guān)資料,開發(fā)Android應(yīng)用的朋友肯定對自定義View不陌生,很多都有重新寫的,這里就對實現(xiàn)圓形進度條介紹下,需要的朋友可以參考下
    2016-11-11
  • Android TabLayout選項卡使用教程

    Android TabLayout選項卡使用教程

    這篇文章主要介紹了Android TabLayout選項卡使用,為什么會有這篇文章呢,是因為之前關(guān)于TabLayout的使用陸陸續(xù)續(xù)也寫了好幾篇了,感覺比較分散,且不成體系,寫這篇文章的目的就是希望能把各種效果的實現(xiàn)一次性講齊
    2023-04-04
  • 實例講解Android中SQLiteDatabase使用方法

    實例講解Android中SQLiteDatabase使用方法

    這篇文章主要以一個簡單的實例為大家詳細講解Android中SQLiteDatabase使用方法,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Android Studio的中文亂碼問題解決方法

    Android Studio的中文亂碼問題解決方法

    Android Studio安裝后發(fā)現(xiàn)所有的中文,不管是界面上的還是輸出的log中的中文都變成小框框,具體的解決方法如下,感興趣的朋友可以參考下哈
    2013-06-06
  • Android 清除SharedPreferences 產(chǎn)生的數(shù)據(jù)(實例代碼)

    Android 清除SharedPreferences 產(chǎn)生的數(shù)據(jù)(實例代碼)

    項目是要保存上次文件播放的位置,我使用SharedPreferences來保存,鍵值對分別是文件路徑和當(dāng)時播放的位置
    2013-11-11

最新評論