博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android视频处理 --处理视频第一帧缩略图
阅读量:4553 次
发布时间:2019-06-08

本文共 3004 字,大约阅读时间需要 10 分钟。

从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

 

转载于:https://www.cnblogs.com/rabbit-bunny/p/4226935.html

你可能感兴趣的文章
linux centos oracle11g 单机完整部署分享
查看>>
hznu
查看>>
《JAVA与模式》之模板方法模式 (转)
查看>>
JavaSE:八种基本数据类型
查看>>
JumpServer 堡垒机 指南
查看>>
IOS UIApplication和AppDelegate 关系
查看>>
HTML5新表单元素
查看>>
Linux CentOS下Python+robot framework环境搭建
查看>>
36: Same Tree
查看>>
bzoj 3671: [Noi2014]随机数生成器【模拟+贪心】
查看>>
MVC html.Telerik 开元控件在线文档
查看>>
题目1545:奇怪的连通图
查看>>
冲刺周期第九天
查看>>
C#操作SQL Server数据库
查看>>
对linux中source,fork,exec的理解以及case的 使用
查看>>
[BZOJ 1816] [Cqoi2010] 扑克牌 【二分答案】
查看>>
懒加载图片
查看>>
Oracle数据类型对应Java类型
查看>>
ASP.NET MVC Controller激活系统详解:IoC的应用[上篇]
查看>>
【知识总结】多项式全家桶(二)(ln和exp)
查看>>