从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 = (
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