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类,可以

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


2011.09.27——— android 视频缩略图之MediaMetadataRetriever_第1张图片


二、找到so文件 新建一个和src同级别的libs文件夹 把so文件复制进去 这个so文件的名字大概为libmedia_jni.so


2011.09.27——— android 视频缩略图之MediaMetadataRetriever_第2张图片

可能有人要问 如何获得so文件呢 方法有两个
A:如果你有android的系统源码 你直接可以搜索libmedia_jni.so 就能得到
B:在androidsdk目录——tools——ddms.bat 启动ddms

2011.09.27——— android 视频缩略图之MediaMetadataRetriever_第3张图片

Device——File Explore
打开一个文件浏览器

2011.09.27——— android 视频缩略图之MediaMetadataRetriever_第4张图片

system——lib——libmedia_jni.so

2011.09.27——— android 视频缩略图之MediaMetadataRetriever_第5张图片


三、
这样之后 你就可以用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()方法 来获得缓存的图片 这个就可以为视频的缩略图
此方法可行!





更多相关文章

  1. 〖Android〗查找Android中的/system/lib中增加的lib文件是否在ap
  2. Android调用系统自带的文件管理器进行文件选择并获得路径
  3. Android 文件的选择
  4. android用于打开各种文件的intent
  5. Delphi XE5 for android 调用Java类库必看的文件
  6. android带图片的AlertDialog和文件管理器(代码)

随机推荐

  1. mysql8.0.18下安装winx64的详细教程(图文
  2. Win10环境下安装Mysql5.7.23问题及遇到的
  3. MySQL中datetime和timestamp的区别及使用
  4. linux(Centos7)下安装mysql8.0.18的教程图
  5. MySQL中NOT IN填坑之列为null的问题解决
  6. mysql 8.0.18 安装配置图文教程
  7. Ubuntu查看修改mysql的登录名和密码、安
  8. 解决mysql登录错误:'Access denied fo
  9. mysql 定时任务的实现与使用方法示例
  10. MySQL字符串索引更合理的创建规则讨论