首页 > 代码库 > Android视频处理 --处理视频第一帧缩略图
Android视频处理 --处理视频第一帧缩略图
从API 8开始,新增了一个类:
android.media.ThumbnailUtils这个类提供了3个静态方法一个用来获取视频第一帧得到的Bitmap,2个对图片进行缩略处理。
?
1 | public static Bitmap createVideoThumbnail (String filePath, int kind) |
第一个参数是视频文件的路径,第二个参数是指定图片的大小,有两种选择Thumbnails.MINI_KIND与Thumbnails.MICRO_KIND。
第一种文档上说大小是512 x 384 ,我用一个MP4格式文件测试得到544 x 960,用一个wmv格式文件测试得到160 x 120。明显不靠谱。第二种参数两种格式文件得到的大小都是 96 x 96,这个才是缩略图。
?
1 2 | extractThumbnail(Bitmap source, int width, int height, int options) extractThumbnail(Bitmap source, int width, int height) |
这两种方法都是用来处理Bitmap的大小的,第一个参数是要处理的Bitmap,第二个参数是处理后宽度,第三个是高度,第四个参数options,如果options定义为OPTIONS_RECYCLE_INPUT,则回收资源。也就是说可以用第三种方法把截取到的视频第一帧的Bitmap转成任意想要的大小,第三个方法还可以获取内存卡内图片的缩略图。
?
1 2 | Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(path1, Thumbnails.MINI_KIND); bitmap = ThumbnailUtils.extractThumbnail(bitmap, 210 , 210 ); |
从API 10开始新增一类MediaMetadataRetriever可以用来获取媒体文件的信息
?
1 2 3 4 5 6 7 | 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可以获取视频任何一帧的缩略图。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | 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 = http://www.mamicode.com/( 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 ; } |
推推族,免费得门票,游景区:www.tuituizu.com
结伴旅游,一个免费的交友网站:www.jieberu.com
Android视频处理 --处理视频第一帧缩略图
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。