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