【短視頻SDK】如何獲取單視頻的縮略圖?
獲取視頻縮略圖iOS和Android分別提供一個方法得到一個視頻的縮略圖,如果需要多張需要開發者自己調用多次即可.
1.Android獲取視頻縮略圖,僅演示單視頻縮略圖獲取方法
核心接口:AliyunIThumbnailFetcher
//1.創建一個AliyunIThumbnailFetcher的實例
AliyunIThumbnailFetcher mThumbnailFetcher = AliyunThumbnailFetcherFactory.createThumbnailFetcher();
//2.添加一個視頻源---path為開發者視頻的本地路徑
mThumbnailFetcher.addVideoSource("path");
//3.設置輸出參數
/*
* @param width 輸出寬度
* @param height 輸出高度
* @param mode 裁剪模式 (目前可以忽略,填任意值,所有的都是從中間裁剪)
* @param scaleMode 縮放模式 (目前可以忽略,填任意值,隻支持裁剪模式,不支持填充模式)
* @param cacheSize 緩存大小,即緩存的縮略圖數量,緩存的圖片不需要重新解碼取,以達到減少耗時的目的.
*/
mThumbnailFetcher.setParameters(60,60,AliyunIThumbnailFetcher.CropMode.Mediate,ScaleMode.LB, 30);
//4.獲取某個時間點的縮略圖
mThumbnailFetcher.requestThumbnailImage(times,
new AliyunIThumbnailFetcher.OnThumbnailCompletion() {
public void onThumbnailReady(ShareableBitmap frameBitmap, long time){
//成功拿到圖片的回調frameBitmap.getData()即可拿到一個bitmap
//需要拿到多張如何做?就在onThumbnailReady這個回調裏麵再調用一 次requestThumbnailImage傳入不一樣的時間即可.
}
public void onError(int errorCode) {
//出錯的回調
}
});
//5.釋放
mThumbnailFetcher.release()
注意:目前僅專業版有該接口.如基礎版或者是標準版有該需求可以通過MediaMetadataRetriever來獲取,單該接口僅能返回關鍵幀的圖片,如果需要獲取N張會有重複圖片的情況.可耐心等待SDK提供獨立的獲取縮略圖的接口.
public Bitmap getVideoThumbnail(String filePath) { Bitmap bitmap = null; MediaMetadataRetriever retriever = new MediaMetadataRetriever(); try { retriever.setDataSource(filePath); bitmap = retriever.getFrameAtTime(); } catch(IllegalArgumentException e) { e.printStackTrace(); } catch (RuntimeException e) { e.printStackTrace(); } finally { try { retriever.release(); } catch (RuntimeException e) { e.printStackTrace(); } } return bitmap; }
2.iOS獲取視頻縮略圖,僅演示單視頻縮略圖獲取方法
iOS因為係統函數就可以直接做到獲取非關鍵幀縮略圖,所以我們直接使用AVFoundation獲取即可.需要多張圖片調用多次即可.
/** * 獲取視頻的縮略圖方法 * * @param filePath 視頻的本地路徑 * * @return 視頻截圖 */ - (UIImage *)getScreenShotImageFromVideoPath:(NSString *)filePath{ UIImage *shotImage; //視頻路徑URL NSURL *fileURL = [NSURL fileURLWithPath:filePath]; AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:fileURL options:nil]; AVAssetImageGenerator *gen = [[AVAssetImageGenerator alloc] initWithAsset:asset]; gen.appliesPreferredTrackTransform = YES; CMTime time = CMTimeMakeWithSeconds(0.0, 600); NSError *error = nil; CMTime actualTime; CGImageRef image = [gen copyCGImageAtTime:time actualTime:&actualTime error:&error]; shotImage = [[UIImage alloc] initWithCGImage:image]; CGImageRelease(image); return shotImage; }
最後更新:2017-08-29 20:32:18