2011.09.27——— android 视频缩略图之MediaMetadataRetriever
16lz
2021-12-04
2011.09.27——— android 视频缩略图之MediaMetadataRetriever
参考: http://www.ophonesdn.com/forum/thread-2973-1-1.html
http://topic.csdn.net/u/20100315/10/2726b427-ca14-4e06-bd44-a6a351f8c52a.html
http://www.pin5i.com/showtopic-android-generate-thumbnails-for-multimedia-files.html
1、
2.2之后 获得缩略图就简单了 因为用了ThumbnailUtils类,可以
参见: http://lipeng88213.iteye.com/blog/835183
2、
但是2.2之前呢 这个问题就比较郁闷了 查了查资料
其实 我们可以用MediaMetadataRetriever这个类
但是 里面有个问题
1.0之后 这个类被隐藏了 貌似2.3之后这个类又出现了吧
隐藏了。。。。那怎么办呢?别慌 我们自有办法 步骤如下:
一、找到MediaMetadataRetriever的源码 复制到你的工程里面去
切忌: 包名必须与MediaMetadataRetriever本身在系统里面的包名一样,也就是包名必须为android.media
二、找到so文件 新建一个和src同级别的libs文件夹 把so文件复制进去 这个so文件的名字大概为libmedia_jni.so
可能有人要问 如何获得so文件呢 方法有两个
A:如果你有android的系统源码 你直接可以搜索libmedia_jni.so 就能得到
B:在androidsdk目录——tools——ddms.bat 启动ddms
Device——File Explore
打开一个文件浏览器
system——lib——libmedia_jni.so
三、
这样之后 你就可以用MediaMetadataRetriever类了
MediaMetadataRetriever主要有两个功能:MODE_GET_METADATA_ONLY和MODE_CAPTURE_FRAME_ONLY
mode为MODE_CAPTURE_FRAME_ONLY时
调用captureFrame取得一帧。
mode为MODE_GET_METADATA_ONLY时
extractMetadata 提取文件信息,ARTIST、DATE、YEAR、DURATION、RATING、FRAME_RATE、VIDEO_FORMAT 可以得到时长等信息
和extractAlbumArt 提取专辑信息,这个下面的音乐文件可以用到。
代码如下:
获得缩略图
获得时长
代码见附件
另外:
我同事有一个获得缩略图另辟蹊径的方法 大致思路如下
偷偷的将视频播放0.1秒 然后通过VideoView.getDrawingCache()方法 来获得缓存的图片 这个就可以为视频的缩略图 此方法可行!
参考: http://www.ophonesdn.com/forum/thread-2973-1-1.html
http://topic.csdn.net/u/20100315/10/2726b427-ca14-4e06-bd44-a6a351f8c52a.html
http://www.pin5i.com/showtopic-android-generate-thumbnails-for-multimedia-files.html
1、
2.2之后 获得缩略图就简单了 因为用了ThumbnailUtils类,可以
Bitmap b = ThumbnailUtils.createVideoThumbnail(path,Video.Thumbnails.MICRO_KIND);ImageView iv = new ImageView(this);
参见: http://lipeng88213.iteye.com/blog/835183
2、
但是2.2之前呢 这个问题就比较郁闷了 查了查资料
其实 我们可以用MediaMetadataRetriever这个类
但是 里面有个问题
1.0之后 这个类被隐藏了 貌似2.3之后这个类又出现了吧
隐藏了。。。。那怎么办呢?别慌 我们自有办法 步骤如下:
一、找到MediaMetadataRetriever的源码 复制到你的工程里面去
切忌: 包名必须与MediaMetadataRetriever本身在系统里面的包名一样,也就是包名必须为android.media
二、找到so文件 新建一个和src同级别的libs文件夹 把so文件复制进去 这个so文件的名字大概为libmedia_jni.so
可能有人要问 如何获得so文件呢 方法有两个
A:如果你有android的系统源码 你直接可以搜索libmedia_jni.so 就能得到
B:在androidsdk目录——tools——ddms.bat 启动ddms
Device——File Explore
打开一个文件浏览器
system——lib——libmedia_jni.so
三、
这样之后 你就可以用MediaMetadataRetriever类了
MediaMetadataRetriever主要有两个功能:MODE_GET_METADATA_ONLY和MODE_CAPTURE_FRAME_ONLY
mode为MODE_CAPTURE_FRAME_ONLY时
调用captureFrame取得一帧。
mode为MODE_GET_METADATA_ONLY时
extractMetadata 提取文件信息,ARTIST、DATE、YEAR、DURATION、RATING、FRAME_RATE、VIDEO_FORMAT 可以得到时长等信息
和extractAlbumArt 提取专辑信息,这个下面的音乐文件可以用到。
代码如下:
获得缩略图
private Bitmap createVideoThumbnail(String filePath) { Bitmap bitmap = null; android.media.MediaMetadataRetriever retriever = new android.media.MediaMetadataRetriever(); try { retriever.setMode(android.media.MediaMetadataRetriever.MODE_CAPTURE_FRAME_ONLY); retriever.setDataSource(filePath); bitmap = retriever.captureFrame(); } catch(IllegalArgumentException ex) { // Assume this is a corrupt video file } catch (RuntimeException ex) { // Assume this is a corrupt video file. } finally { try { retriever.release(); } catch (RuntimeException ex) { // Ignore failures while cleaning up. } } return bitmap; }
获得时长
private String ttt(String filePath){ android.media.MediaMetadataRetriever retriever = new android.media.MediaMetadataRetriever(); retriever.setMode(android.media.MediaMetadataRetriever.MODE_GET_METADATA_ONLY); retriever.setDataSource(filePath); String str = retriever.extractMetadata(android.media.MediaMetadataRetriever.METADATA_KEY_DURATION); System.out.println(str +" ====="); return str; }
代码见附件
另外:
我同事有一个获得缩略图另辟蹊径的方法 大致思路如下
偷偷的将视频播放0.1秒 然后通过VideoView.getDrawingCache()方法 来获得缓存的图片 这个就可以为视频的缩略图 此方法可行!
更多相关文章
- Unity调用Android
- Android复制文件
- Android--用SAX解析xml文件
- 〖Android〗查找Android中的/system/lib中增加的lib文件是否在ap
- Android调用系统自带的文件管理器进行文件选择并获得路径
- Android(安卓)compress Image
- android的文件操作
- Android(安卓)文件的选择
- android aidl(android studio)