android 获取网络视频缩略图【完美兼容各版本
来源:互联网 发布:党员干部必知50个名词 编辑:程序博客网 时间:2024/04/29 06:06
android 获取网络视频缩略图【完美兼容各版本】
首先是一个不太完美但非常简洁的解决方案,在多数手机测试通过,目前只有samsung TabletGTP7310未能正常显示,但能通过本文方案二解决。
方案一:感谢@xjxuvup提供
鉴于多数人都用过ThumbnailUtils.createVideoThumbnail()方法,该方法在2.x系统下可用,API LEVEL > 14时却只能返回null,以下为解决该问题方案:
重写createVideoThumbnail()方法,如下
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)private Bitmap createVideoThumbnail(String url, int width, int height) { Bitmap bitmap = null; MediaMetadataRetriever retriever = new MediaMetadataRetriever(); int kind = MediaStore.Video.Thumbnails.MINI_KIND; try { if (Build.VERSION.SDK_INT >= 14) { retriever.setDataSource(url, new HashMap<String, String>()); } else { retriever.setDataSource(url); } bitmap = retriever.getFrameAtTime(); } 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. } } if (kind == Images.Thumbnails.MICRO_KIND && bitmap != null) { bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height, ThumbnailUtils.OPTIONS_RECYCLE_INPUT); } return bitmap; }
之后再自己的后台线程中调用该方法得到网络视频的缩略图bitmap然后在主线程中调用imageView.setImageBitmap(bitmap)即可;
方案二:
方案一在自己的tablet上测试不通过,于是又在github上找到了另一个扩展版的FFMPEG MediaMetadataRetriever ,提供了一个可以获取视频详细信息和缩略图的统一接口,支持API 7+,(android 自带MediaMetadataRetriever仅支持API 10+),同时支持Uri
,支持的文件类型 file, http, https, mms and mmsh 支持的编码格式(音频&视频): aac, acc+, avi, flac, mp2, mp3, mp4, ogg, 3gp and more! 扩展支持: ICY Metadata (SHOUTcast metadata) 使用方法异常简单,只需将下边的包下载到本地解压然后把libs中的文件拷贝到自己项目的libs目录下即可https://github.com/wseemann/FFmpegMediaMetadataRetriever/blob/master/fmmr-library/prebuilt-libs.tar.gz .
调用:
FFmpegMediaMetadataRetriever fmmr = new FFmpegMediaMetadataRetriever(); try { fmmr.setDataSource(params[0]); bitmap = fmmr.getFrameAtTime(); if (bitmap != null) { Bitmap b2 = fmmr .getFrameAtTime( 4000000, FFmpegMediaMetadataRetriever.OPTION_CLOSEST_SYNC); if (b2 != null) { bitmap = b2; } if (bitmap.getWidth() > 640) {// 如果图片宽度规格超过640px,则进行压缩 bitmap = ThumbnailUtils.extractThumbnail(bitmap, 640, 480, ThumbnailUtils.OPTIONS_RECYCLE_INPUT); } } } catch (IllegalArgumentException ex) { ex.printStackTrace(); } finally { fmmr.release(); }
这样就可以很方便的获取到缩略图bitmap了。
另:可能有朋友下载了prebuilt-libs.tar.gz之后会惊讶的发现,解压之后的libs文件竟然多达11MB!! 这么庞大的体积对我来说是不能接受的。。。原本2MB的apk瞬间膨胀了5倍之多啊尼玛!
但仔细研究libs一番,发现对于我这种MMR的轻度用户,只需缩略图的功能的话,完全可以简化那些用不到的编码库和多平台库,同时无视mips和x86平台的话,只需libffmpeg_mediametadataretriever_jni.so和fmmr.jar两个文件就可以了,瞬间<30kb了有木有!
其实官方也说了,demo中给的是全部编码格式,可以按照自己的需求重新编译相应编码的lib就可以。
- android 获取网络视频缩略图【完美兼容各版本】
- android 获取网络视频缩略图【完美兼容各版本
- android 获取网络视频缩略图【完美兼容各版本】
- android 获取网络视频缩略图
- 获取网络视频缩略图
- Android使用VideoView播放网络视频,获取网络视频缩略图
- Android使用VideoView播放网络视频,获取网络视频缩略图
- Android使用VideoView播放网络视频,获取网络视频缩略图
- Android获取视频缩略图
- android 获取视频缩略图
- Android 获取视频缩略图
- Android 获取视频(本地和网络)缩略图的解决方案
- android 获取视频,图片缩略图
- android 获取视频,图片缩略图
- 如何获取本地,网络视频的缩略图
- 安卓获取网络视频的缩略图
- Android获取网络视频文件缩略图
- android获取图片和视频的缩略图
- Linux命令行在su root后突然变成bash-4.1$的办法
- GIC ITS 学习笔记(一)
- HTML5——Web存储API,sessionStorage和localStorage
- Struts2学习笔记
- Linux less 命令 【转载】
- android 获取网络视频缩略图【完美兼容各版本
- Android五大布局之网格布局
- 斤斤计较的人永远不会获得幸福
- [笔记]架构探险-从零开始写JavaWeb框架-1. 之搭建轻量级mvc框架
- QT Win7开发环境安装配置程
- opencv3计算轮廓的面积-contourArea函数
- 使用cookie绕过验证码进行模拟登录
- 熟悉ALM环境,建立域,项目,用户名等; 练习创建发布树。
- Android_05_多线程断点续传下载