搭建直播平臺,android 如何得到本地影片的縮圖
搭建直播平臺,android 如何得到本地影片的縮圖
public class VideoThumbUtils { /** * 得到視屏的縮圖 * * @param videoPath * @param width * @param height * @return */ public static Bitmap getVideoThumbnail(String videoPath, int width, int height) { Bitmap result = null; Bitmap temp = null; if(videoPath==null){ return null; } File file = new File(videoPath); if (!file.exists()) { return null; } MediaMetadataRetriever metadataRetriever = new MediaMetadataRetriever(); try { metadataRetriever.setDataSource(videoPath); // 設定視屏資源(還有一種是傳url的,這裡傳的string) String time = metadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); long frameTime = Long.parseLong(time) * 1000 / 2;// 視屏前面的幀可能為黑屏,所以取中間的幀 temp = metadataRetriever.getFrameAtTime(frameTime, MediaMetadataRetriever.OPTION_CLOSEST_SYNC); if (null == temp) { temp = metadataRetriever.getFrameAtTime(0); } } catch (Exception o) { o.printStackTrace(); } finally { try { metadataRetriever.release(); } catch (RuntimeException o) { o.printStackTrace(); } } result = extractThumbnail(temp, width, height, ThumbnailUtils.OPTIONS_RECYCLE_INPUT); //對得到的bitmap壓縮 return result; } private static Bitmap extractThumbnail(Bitmap source, int width, int height, int options) { if (source == null) { return null; } float scale; if (source.getWidth() < source.getHeight()) { //得到壓縮比 scale = width / (float) source.getWidth(); } else { scale = height / (float) source.getHeight(); } Matrix matrix = new Matrix(); matrix.setScale(scale, scale); Bitmap thumbnail = transform(matrix, source, width, height, 0x1 | options); return thumbnail; } private static Bitmap transform(Matrix scaler, Bitmap source, int targetWidth, int targetHeight, int options) { boolean scaleUp = (options & 0x1) != 0; boolean recycle = (options & ThumbnailUtils.OPTIONS_RECYCLE_INPUT) != 0; int deltaX = source.getWidth() - targetWidth; int deltaY = source.getHeight() - targetHeight; if (!scaleUp && (deltaX < 0 || deltaY < 0)) { /* * In such case the bitmap is smaller, at least in one dimension, than the target. Transform * it by placing as much of the image as possible into the target and leaving the top/bottom * or left/right (or both) black. */ Bitmap b2 = Bitmap.createBitmap(targetWidth, targetHeight, Bitmap.Config.ARGB_8888); Canvas c = new Canvas(b2); int deltaXHalf = Math.max(0, deltaX / 2); int deltaYHalf = Math.max(0, deltaY / 2); Rect src = new Rect(deltaXHalf, deltaYHalf, deltaXHalf + Math.min(targetWidth, source.getWidth()), deltaYHalf + Math.min(targetHeight, source.getHeight())); int dstX = (targetWidth - src.width()) / 2; int dstY = (targetHeight - src.height()) / 2; Rect dst = new Rect(dstX, dstY, targetWidth - dstX, targetHeight - dstY); c.drawBitmap(source, src, dst, null); if (recycle) { source.recycle(); } c.setBitmap(null); return b2; } float bitmapWidthF = source.getWidth(); float bitmapHeightF = source.getHeight(); float bitmapAspect = bitmapWidthF / bitmapHeightF; float viewAspect = (float) targetWidth / targetHeight; if (bitmapAspect > viewAspect) { float scale = targetHeight / bitmapHeightF; if (scale < .9F || scale > 1F) { scaler.setScale(scale, scale); } else { scaler = null; } } else { float scale = targetWidth / bitmapWidthF; if (scale < .9F || scale > 1F) { scaler.setScale(scale, scale); } else { scaler = null; } } Bitmap b1; if (scaler != null) { // used for minithumb and crop, so we want to filter here. b1 = Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), scaler, true); } else { b1 = source; } if (recycle && b1 != source) { source.recycle(); } int dx1 = Math.max(0, b1.getWidth() - targetWidth); int dy1 = Math.max(0, b1.getHeight() - targetHeight); Bitmap b2 = Bitmap.createBitmap(b1, dx1 / 2, dy1 / 2, targetWidth, targetHeight); if (b2 != b1) { if (recycle || b1 != source) { b1.recycle(); } } return b2; }
以上就是 搭建直播平臺,android 如何得到本地影片的縮圖,更多內容歡迎關注之後的文章
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69978258/viewspace-2943503/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 直播平臺搭建,實現圖片縮圖功能
- 如何搭建直播平臺?直播平臺搭建需要注意什麼?
- 直播電商平臺開發,Android | 圖片縮放、自動居中Android
- 直播app開發搭建,Android studio 圖片壓縮APPAndroid
- 直播平臺搭建,Android手機拍照和手機相簿選取圖片的工具Android
- 直播系統平臺搭建,控制鍵盤彈出收縮
- 直播原始碼如何搭建一個屬於自己的直播平臺?原始碼
- 搭建直播平臺,Android ListView 長按刪除列表項AndroidView
- 搭建直播平臺,Android開發之禁止下拉通知欄的方法Android
- Android平臺影像壓縮方案Android
- 移動短影片直播開發,短影片原始碼搭建社交平臺原生APP原始碼APP
- 直播系統平臺搭建適配Android WebView 深色主題AndroidWebView
- 直播平臺搭建原始碼,更改圖片透明度原始碼
- 影片服務平臺如何解決直播平臺開發中具有挑戰的工作
- 各平臺入場本地生活市場,商家如何運營短影片平臺流量
- 直播平臺的影片美顏sdk是什麼?
- 從0開始搭建自己的直播平臺
- 直播系統原始碼--搭建直播平臺的奠基石原始碼
- PHP直播平臺原始碼搭建教程PHP原始碼
- 淺析Android平臺影象壓縮方案Android
- 直播平臺搭建原始碼,bootstrap實現圖片輪播效果原始碼boot
- 爬蟲管理平臺以及wordpress本地搭建爬蟲
- 7天31W交易額,如何利用短影片同城小程式搭建本地休閒景區平臺?
- 短影片直播APP系統:成品原始碼開發快速搭建部署平臺APP原始碼
- 如何開發直播平臺,直播平臺開發需要CDN嗎
- 直播平臺搭建原始碼,Android進度條ProgressBar顏色的漸變設定原始碼Android
- 直播平臺原始碼,上傳本地圖片實現個人名片背景圖輪播原始碼地圖
- 搭建直播平臺,iYiuMessage 訊息提示元件元件
- 快速運營搭建直播軟體平臺直播原始碼!原始碼
- 直播平臺搭建,vue中實現圖片懶載入的幾種方法Vue
- 直播平臺搭建原始碼,XBanner設定只顯示輪播圖原始碼
- 音影片編解碼技術在直播平臺中是如何運用的?
- 直播平臺開發經驗分享——直播平臺搭建環境配置詳解及分析
- 短影片直播美顏sdk可以接入其它影片社交平臺嗎?
- 搭建自己的直播平臺,將圖片設定為卡片式輪播效果
- 短影片平臺開發,首先要搭建短影片框架框架
- 企業搭建直播平臺的實際作用有哪些
- 搭建自己的直播平臺,實現exe單例模式單例模式