1. 程式人生 > >Android -- 獲取視訊第一幀縮圖

Android -- 獲取視訊第一幀縮圖

API 8開始,新增了一個類:

android.media.ThumbnailUtils這個類提供了3個靜態方法一個用來獲取視訊第一幀得到的Bitmap,2個對圖片進行縮略處理。

public static Bitmap createVideoThumbnail (String filePath, int kind)

第一個引數是視訊檔案的路徑,第二個引數是指定圖片的大小,有兩種選擇Thumbnails.MINI_KINDThumbnails.MICRO_KIND。

  • 第一種文件上說大小是512 x 384 ,我用一個MP4格式檔案測試得到544 x 960,用一個wmv格式檔案測試得到160 x 120。明顯不靠譜。
  • 第二種引數兩種格式檔案得到的大小都是 96 x 96,這個才是縮圖。
extractThumbnail(Bitmap source, int width, int height, int options)
extractThumbnail(Bitmap source, int width, int height)

這兩種方法都是用來處理Bitmap的大小的,第一個引數是要處理的Bitmap,第二個引數是處理後寬度,第三個是高度,第四個引數options,如果options定義為OPTIONS_RECYCLE_INPUT,則回收資源。也就是說可以用第三種方法把擷取到的視訊第一幀的Bitmap轉成任意想要的大小,第三個方法還可以獲取記憶體卡內圖片的縮圖。

Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(path1, Thumbnails.MINI_KIND);  
bitmap = ThumbnailUtils.extractThumbnail(bitmap, 210, 210);

API 10開始新增一類MediaMetadataRetriever可以用來獲取媒體檔案的資訊

複製程式碼
MediaMetadataRetriever mmr = new MediaMetadataRetriever();  
mmr.setDataSource("/sdcard/33.mp4");  
Bitmap bitmap 
= mmr.getFrameAtTime(); image.setImageBitmap(bitmap); System.out.println(mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DATE)+""); System.out.println(mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_MIMETYPE)+""); mmr.release();
複製程式碼

MediaMetadataRetriever可以獲取視訊任何一幀的縮圖。

複製程式碼
public static Bitmap createVideoThumbnail(String filePath) {  
    // MediaMetadataRetriever is available on API Level 8  
    // but is hidden until API Level 10  
    Class<?> clazz = null;  
    Object instance = null;  
    try {  
        clazz = Class.forName("android.media.MediaMetadataRetriever");  
        instance = clazz.newInstance();  
  
        Method method = clazz.getMethod("setDataSource", String.class);  
        method.invoke(instance, filePath);  
  
        // The method name changes between API Level 9 and 10.  
        if (Build.VERSION.SDK_INT <= 9) {  
            return (Bitmap) clazz.getMethod("captureFrame").invoke(instance);  
        } else {  
            byte[] data = (byte[]) clazz.getMethod("getEmbeddedPicture").invoke(instance);  
            if (data != null) {  
                Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);  
                if (bitmap != null) return bitmap;  
            }  
            return (Bitmap) clazz.getMethod("getFrameAtTime").invoke(instance);  
        }  
    } catch (IllegalArgumentException ex) {  
        // Assume this is a corrupt video file  
    } catch (RuntimeException ex) {  
        // Assume this is a corrupt video file.  
    } catch (InstantiationException e) {  
        Log.e(TAG, "createVideoThumbnail", e);  
    } catch (InvocationTargetException e) {  
        Log.e(TAG, "createVideoThumbnail", e);  
    } catch (ClassNotFoundException e) {  
        Log.e(TAG, "createVideoThumbnail", e);  
    } catch (NoSuchMethodException e) {  
        Log.e(TAG, "createVideoThumbnail", e);  
    } catch (IllegalAccessException e) {  
        Log.e(TAG, "createVideoThumbnail", e);  
    } finally {  
        try {  
            if (instance != null) {  
                clazz.getMethod("release").invoke(instance);  
            }  
        } catch (Exception ignored) {  
        }  
    }  
    return null;  
}
複製程式碼

相關推薦

Android 獲取視訊第一

乾貨 從API 8開始,新增了一個類: android.media.ThumbnailUtils這個類提供了3個靜態方法一個用來獲取視訊第一幀得到的Bitmap,2個對圖片進行縮略處理。 public static Bitmap createVideoThumbna

Android -- 獲取視訊第一

從API 8開始,新增了一個類: android.media.ThumbnailUtils這個類提供了3個靜態方法一個用來獲取視訊第一幀得到的Bitmap,2個對圖片進行縮略處理。 public static Bitmap createVideoThumbnail (

Android視訊處理 --處理視訊第一

從API 8開始,新增了一個類: android.media.ThumbnailUtils這個類提供了3個靜態方法一個用來獲取視訊第一幀得到的Bitmap,2個對圖片進行縮略處理。 ? 1 public static Bitmap createVi

android獲取圖片原始長寬,獲取視訊第一

public static Bitmap getVideoThumbnail(String videoPath) { MediaMetadataRetriever media =new MediaMetadataRetriever(); media.setDataSource(videoPat

獲取視訊第一(本地視訊、網路視訊

public static Bitmap createVideoThumbnail(String filePath, int kind) { Bitmap bitmap = null; MediaMetadataRetriever retriever = new MediaMetadataRetrie

Java獲取視訊第一

Java使用FFmpeg獲取視訊的縮圖 ffmpegPath為FFmpeg.exe所在路徑 upFilePath為視訊的所在路徑(本地路徑) mediaPicPath為縮圖的儲存路徑(D:/test.jpg) private void handler(String ffm

windows下PHP獲取視訊第一圖片作為背景

我在網上找了很多這方面的資料,總結如下:一般用ffmpeg獲取視訊第一幀圖片作為背景圖; ffmpeg的下載連結  http://ffmpeg.org/download.html ; 下載好包,包裡面在

Android之使用MediaMetadataRetriever類獲取視訊第一

一.首先,來介紹一下MediaMetadataRetriever類,此類位於android.media包下,這裡,先附上可檢視此類的API地址:MediaMetadataRetriever類,大家可以自行檢視。 1.MediaMetadataRetriever類概述:Med

Android 獲取最近應用的

最近有項需求是獲取應用的縮略,用於在動畫時顯示。因此就對此塊知識簡要了解了一下。 在android中獲取視訊檔案的縮圖有三種方法: 1.從媒體庫中查詢新視訊增加後需要SDCard重新掃描才能給新增加

android 獲取video列表和 親測()

廢話不多說,有效果圖: 由於時間關係,只貼出獲得video 資料的程式碼,請自行去做適配gridview 的工作 (紅色字型是關鍵點) class MyRunnable implements Runnable { @Override

[Android] 本地視訊檔案的實現方案

【需求說明】 最近在實現公司專案時,遇到的需求之一就是顯示本地視訊檔案的縮圖。參考了一下網上提供的各種方案, 最終選取了ThumbnailUtils這個類來實現(這個是Android2.2系統以後提供的一個ThumbNail幫助類)鑑於專案 中sdk的最低版本已經是16,所

檔案上傳至oss後,獲取圖片獲取視訊等後續操作

上一篇文章說了一下檔案上傳至oss:https://blog.csdn.net/new_programmer_h/article/details/84307005 這裡說一下上傳後的一些後續操作:常用的獲取圖片縮率圖、獲取視訊截幀生成封面圖。自我感覺阿里oss對於這些處理封裝的很好,只要根據:"%s|sys

ffmpeg處理視訊獲取第一

<?php //使用PHP SDK,並且使用自定義配置檔案 require app_path().'/include/BaiduBce.phar'; require app_path().'/include/SampleConf.php'; require app_path().'

Android在Adapter中獲取網路視訊第一(優化)

 獲取成功以後使用的是map儲存,key為adapter的position 避免銷燬再次載入 @SuppressLint("UseSparseArrays") private Map<Integer, Bitmap> bitmapMap = new Hash

android 獲取視訊終極解決方案(ffmpeg)

前些天有個師弟(在做一個仿LinkInEyes行車記錄儀的app)問我怎麼獲取視訊縮圖,起初以為很簡單,就找了個常用的解決方案(使用者獲取正常的視訊檔案的縮圖): 方案1: private void initView() { imgPic = (

Android 獲取視訊以及獲取視訊解析度

今天遇到一個問題,視訊播放不能居中。 在設定VideoView的Layout時候,把整個螢幕分配給VideoView。 不過Video在播放的時候,對於成寬比和螢幕不一樣的視訊,卻沒有把視訊播放到中央。 採用相同的策略,ImageView就可以把影象放到螢幕最中央,感覺是V

Android中如何獲取視訊檔案的截

背景 公司最近要求給我負責的APP加上視訊錄製和釋出的功能,我簡單的完成了基本的錄製和視訊壓縮功能,後來發現釋出介面需要上傳視訊的截圖,網上搜索了一下資料,在這裡整理一下。 程式碼實現 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

在檔案管理器中顯示圖片的視訊第一

首先在vender/mediatek/properties/packags/apps/FileManager/src/com/mediatek/filemanager/IconManager.java中匯入兩個類import android.media.ThumbnailU

Android 獲取視訊(本地和網路)的解決方案

在Android 開發視訊的時候,通常都需要顯示視訊列表,而視訊列表通常都有一張視訊縮圖,那麼它是怎麼獲取的呢, 關於網路視訊的縮圖的實現方案主要有兩種: 1、後臺返回視訊時順便連縮圖的路徑都返回給你了,這樣前端壓力輕鬆。 2、後臺是返回視訊路徑,關於縮圖

android 獲取視訊某一時間的,並獲取bitmap

最近要做一個為視訊設定封面的功能,這裡展示一下簡單的demo。 demo效果 這裡直接將選取的視訊某一時間的bitmap顯示在視訊下方。上面是視訊,下面是所獲取那一幀的截圖。 具體程式碼 這裡的話主要是靠videoView來顯示視訊內容,seekBar來控制視訊的進