最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

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

這里還列舉一下MediaMetadataRetriever獲取視頻的其他幾個(gè)函數(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);

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

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

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

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

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

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

OPTION_PREVIOUS_SYNC   顧名思義,同上

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

/**
   * 獲取視頻的縮略圖
   * 先通過(guò)ThumbnailUtils來(lái)創(chuàng)建一個(gè)視頻的縮略圖,然后再利用ThumbnailUtils來(lái)生成指定大小的縮略圖。
   * 如果想要的縮略圖的寬和高都小于MICRO_KIND,則類型要使用MICRO_KIND作為kind的值,這樣會(huì)節(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;
  }

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

下面還列舉如何將bitmap保存到文件,因?yàn)楂@取到視頻的縮略圖后,可能需要保存到本地,下次進(jìn)入app時(shí)可以直接查看。

/** 
* 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 獲取視頻第一幀作為縮略圖就講完了。

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

相關(guān)文章

  • Android EditText實(shí)現(xiàn)分割輸入內(nèi)容

    Android EditText實(shí)現(xiàn)分割輸入內(nèi)容

    這篇文章主要為大家詳細(xì)介紹了Android EditText實(shí)現(xiàn)分割輸入內(nèi)容的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Android Studio配置文件路徑修改的方法

    Android Studio配置文件路徑修改的方法

    這篇文章主要介紹了Android Studio配置文件路徑修改的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Android自動(dòng)獲取短信驗(yàn)證碼功能

    Android自動(dòng)獲取短信驗(yàn)證碼功能

    這篇文章主要介紹了Android自動(dòng)獲取短信驗(yàn)證碼功能,通過(guò)自定義短信監(jiān)聽(tīng)器用于自動(dòng)填充驗(yàn)證碼功能,具體實(shí)現(xiàn)代碼大家可以參考下本文
    2017-04-04
  • Flutter學(xué)習(xí)之SliverList和SliverGird的使用詳解

    Flutter學(xué)習(xí)之SliverList和SliverGird的使用詳解

    Sliver的組件一般都用在CustomScrollView中,除了SliverAppBar之外,我們還可以為CustomScrollView添加List或者Grid來(lái)實(shí)現(xiàn)更加復(fù)雜的組合效果。本文就來(lái)聊聊SliverList和SliverGird的使用吧
    2023-02-02
  • Android中Textview超鏈接實(shí)現(xiàn)方式

    Android中Textview超鏈接實(shí)現(xiàn)方式

    TextView中的超鏈接可以通過(guò)幾種方式實(shí)現(xiàn):1.Html.fromHtml,2.Spannable,3.Linkify.addLinks。下面分別進(jìn)行測(cè)試,包括修改字體樣式,下劃線樣式,點(diǎn)擊事件等,需要的朋友可以參考下
    2016-02-02
  • Android中捕獲TTextView文本中的鏈接點(diǎn)擊事件方法

    Android中捕獲TTextView文本中的鏈接點(diǎn)擊事件方法

    這篇文章主要介紹了Android中捕獲TTextView文本中的鏈接點(diǎn)擊事件方法,本文給出了實(shí)現(xiàn)代碼和使用方法以及實(shí)現(xiàn)自己控制的方法,需要的朋友可以參考下
    2015-01-01
  • Android仿拉手網(wǎng)團(tuán)購(gòu)App產(chǎn)品詳情界面效果

    Android仿拉手網(wǎng)團(tuán)購(gòu)App產(chǎn)品詳情界面效果

    這篇文章主要介紹了Android仿拉手網(wǎng)團(tuán)購(gòu)App產(chǎn)品詳情界面效果,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-05-05
  • Android SharePreferences與數(shù)據(jù)庫(kù)SQLite存儲(chǔ)實(shí)現(xiàn)方法介紹

    Android SharePreferences與數(shù)據(jù)庫(kù)SQLite存儲(chǔ)實(shí)現(xiàn)方法介紹

    這篇文章主要介紹了Android SharePreferences與數(shù)據(jù)庫(kù)SQLite用于存儲(chǔ)的具體實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-09-09
  • Android開(kāi)發(fā)中播放聲音的兩種方法分析

    Android開(kāi)發(fā)中播放聲音的兩種方法分析

    這篇文章主要介紹了Android開(kāi)發(fā)中播放聲音的兩種方法,結(jié)合實(shí)例形式簡(jiǎn)單分析了Android音頻播放的常用函數(shù)、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-09-09
  • Android編程實(shí)現(xiàn)wifi掃描及連接的方法

    Android編程實(shí)現(xiàn)wifi掃描及連接的方法

    這篇文章主要介紹了Android編程實(shí)現(xiàn)wifi掃描及連接的方法,涉及Android網(wǎng)絡(luò)操作掃描、查找、連接、線程等相關(guān)操作技巧,需要的朋友可以參考下
    2018-02-02

最新評(píng)論

乐都县| 垫江县| 邢台市| 富阳市| 岑巩县| 彭山县| 蓬溪县| 西昌市| 张家界市| 华坪县| 伊宁县| 武夷山市| 孝感市| 微博| 科技| 莱州市| 固镇县| 托里县| 西峡县| 稷山县| 上饶县| 丽水市| 曲阜市| 香港 | 民勤县| 河北省| 石渠县| 格尔木市| 五华县| 宁乡县| 和平县| 虞城县| 巨野县| 开鲁县| 中阳县| 清徐县| 陇西县| 巴彦县| 建水县| 巢湖市| 宝坻区|