Android 視頻截圖方法

jopen 9年前發布 | 54K 次閱讀 Android Android開發 移動開發

1. 前言

本文討論的是獲取視頻在某個時間點的圖像, 而非屏幕截圖.

如果要獲取屏幕截圖的話直接(電源鍵+音量下)


2. 獲取視頻截圖

2.1 MediaMetadataRetriever

MediaMetadataRetriever從名稱上看可以獲取視頻的Metadata信息, 此外還可以獲取視頻的截圖, 其中抽取視頻的縮略圖就是采用此函數實現的. 

2.2 使用方法

采用MediaMetadatRetriever.getFrameAtTime方法獲取視頻的該幀圖像.

public Bitmap getFrameAtTime (long timeUs)

public Bitmap getFrameAtTime (long timeUs, int option)


需要注意的是:

該時間點的單位是微秒,普通時間的單位都是毫秒;


option :

OPTION_CLOSEST: 獲取離timeUs最近的一幀圖像.

此函數獲取的幀是Sync Frame, 由于在timeUs此時間點不一定恰好有一個Sync Frame, 所以會有一定的誤差.

獲取Sync Frame時 有3中情況:

(1) 在timeUs處恰好有一個Sync Frame

(2) 獲取timeUs前一個Sync Frame

(3) 獲取timeUs后一個Sync Fram


OPTION_PREVIOUS_SYNC: (1) or (2)

OPTION_NEXT_SYNC: (1) or (3)

OPTION_CLOSEST_SYNC: 獲取離timeUs最近的一個Sync Frame

MediaMetadataRetriever retriever = new MediaMetadataRetriever();  
try {  
    retriever.setDataSource(mFilePath);  
    Bitmap bitmap = retriever.getFrameAtTime(miCurPos*1000);  
    String path = Environment.getExternalStorageDirectory() + File.separator  
            + Environment.DIRECTORY_DCIM + "/Camera";  
    path += Tools.getDisplayName(mFilePath) + "_" + Tools.IntToTimeString(miCurPos) + "_" + ".png";  
    Tools.saveBitmap(bitmap, path);  

    sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File(path))));  
} catch (IllegalArgumentException e) {  
    e.printStackTrace();  
    VideoLogger.e(TAG, "MediaMetadataRetriever.setDataSource Failed: " + mFilePath);  
    ShowToast(mResources.getString(R.string.info_screen_shot_failed), 0);  
}  

來自:http://blog.csdn.net/matrix_laboratory/article/details/43267907

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!