在Android 开发视频的时候,通常都需要显示视频列表,而视频列表通常都有一张视频缩略图,那么它是怎么获取的呢,

关于网络视频的缩略图的实现方案主要有两种:

1、后台返回视频时顺便连缩略图的路径都返回给你了,这样前端压力轻松。

2、后台是返回视频路径,关于缩略图,前端从视频中获取。

那么如何从视频中获取缩略图呢?

1、关于本地视频的缩略图,官方有提供解决方案:

ThumbnailUtils.createVideoThumbnail(String filePath, int kind);

方法便可以获取:

Bitmap bitmap= BitmapUtil.createVideoThumbnail(url,MediaStore.Video.Thumbnails.MINI_KIND);

2、那么网络视频怎么获取呢?

经过分析MediaMetadataRetriever类,发现有一个方法,setDataSource(String uri, Map

/**

* Sets the data source (URI) to use. Call this

* method before the rest of the methods in this class. This method may be

* time-consuming.

*

* @param uri The URI of the input media.

* @param headers the headers to be sent together with the request for the data

* @throws IllegalArgumentException If the URI is invalid.

*/

public void setDataSource(String uri, Map headers)

throws IllegalArgumentException {

int i = 0;

String[] keys = new String[headers.size()];

String[] values = new String[headers.size()];

for (Map.Entry entry: headers.entrySet()) {

keys[i] = entry.getKey();

values[i] = entry.getValue();

++i;

}

_setDataSource(

MediaHTTPService.createHttpServiceBinderIfNecessary(uri),

uri,

keys,

values);

}

这个方法说明了是获取网络的数据,了解了源码就好办,我们就依葫芦画瓢,自己创建一个类模仿一个方法出来:

这个方法,调用了retriever.setDataSource(filePath,new Hashtable

/** * Create a video thumbnail for a video. May return null if the video is * corrupt or the format is not supported. * *@param filePath the path of video file *@param kind could be MINI_KIND or MICRO_KIND */

public static Bitmap createVideoThumbnail(String filePath, int kind) {

Bitmap bitmap = null;

MediaMetadataRetriever retriever = new MediaMetadataRetriever();

try {

if (filePath.startsWith("http://")

|| filePath.startsWith("https://")

|| filePath.startsWith("widevine://")) {

retriever.setDataSource(filePath,new Hashtable());

}else {

retriever.setDataSource(filePath);

}

bitmap = retriever.getFrameAtTime(-1);

} catch (IllegalArgumentException ex) {

// Assume this is a corrupt video file

ex.printStackTrace();

} catch (RuntimeException ex) {

// Assume this is a corrupt video file.

ex.printStackTrace();

} finally {

try {

retriever.release();

} catch (RuntimeException ex) {

// Ignore failures while cleaning up.

ex.printStackTrace();

}

}

if (bitmap == null) return null;

if (kind == MediaStore.Images.Thumbnails.MINI_KIND) {

// Scale down the bitmap if it's too large.

int width = bitmap.getWidth();

int height = bitmap.getHeight();

int max = Math.max(width, height);

if (max > 512) {

float scale = 512f / max;

int w = Math.round(scale * width);

int h = Math.round(scale * height);

bitmap = Bitmap.createScaledBitmap(bitmap, w, h, true);

}

} else if (kind == MediaStore.Images.Thumbnails.MICRO_KIND) {

bitmap = ThumbnailUtils.extractThumbnail(bitmap,

96,

96,

ThumbnailUtils.OPTIONS_RECYCLE_INPUT);

}

return bitmap;

}

这样就可以获取网络视频缩略图了,可能还存在版本兼容上没做兼容,欢迎提出意见

android获取网络视频缩略图,Android 获取视频(本地和网络)缩略图的解决方案相关推荐

  1. android实现本地视频播放功能,Android开发 MediaPlayer入门_播放本地视频

    前言 MediaPlayer,可以播放视频/音频,并且它支持本地和网络文件的播放.本片博客作为入门教程,先以最通俗的方式解释播放文件本地视频. 实现流程 获取权限 保持屏幕常亮 初始化SurfaceV ...

  2. 【音视频】使用FFMPEG读取本地|网络音视频流(3-4)

    前言:继上一篇推送网络流之后,最近又研究了一下读取网络流(顺便还有本地流)作为音视频源,此篇作为记录. 一.本地|网络视频源 1.初始化视频源 int VStreamCaptor::init(cons ...

  3. 从本地或者网络读取图片,并转换为Bitmap图片

    在做android项目时,我们经常需要从本地或者网络读取图片,并转换为Bitmap图片,以便使用,下面是读取本地图片并转换的方法: Java代码   /** * 得到本地或者网络上的bitmap ur ...

  4. IBM Cloud VPC网络与本地办公网络的互通

    VPN 连接(VPN Connections)是一种基于网络隧道技术,实现本地数据中心与公有云上资源连通的传输服务,它能帮您在 Internet 上快速构建一条安全.可靠的加密通道.VPN 连接具有配 ...

  5. 笔记本显示网络电缆被拔出怎么解决_本地连接网络电缆被拔出 本地连接网络电缆被拔出解决方法【图文】...

    网络可以说是我们日常生活中必不可少的一部分了,因此网络的使用,我们能够实现很多无论是工作方面还是在学习上,亦或是日常生活中的便利.但是有很多用户反映,自己在日常使用网络的过程中总是会显示"本 ...

  6. 5G系统——本地数据网络(LADN)

    Local Area Data Network(LADN):本地数据网络 LADN service area:本地数据网络服务区 UE只有本地数据网络的服务区才能通过连接本地数据网络的PDU会话访问本 ...

  7. android获取图片缩略图,Android系获取图片和视频的缩略图

    获取手机里视频缩略图: public static Bitmap getVideoThumbnail(ContentResolver cr,Uri uri) { Bitmap bitmap = nul ...

  8. Android之使用ThumbnailUtils类来获取视频第一帧缩略图

    一.首先,来介绍ThumbnailUtils类,此类位于android.media包下,此类有一个公有的无参构造函数,有三个静态的公有方法,一个用来获取视频第一帧得到的Bitmap,另外两个方法用 ...

  9. android 获取网络视频资源,Android 加载网络视频(url地址)第三方框架简用

    正好最近做项目有个需要加载网络视频技术,就找了找,碰到了这个开源的框架.主要还是网络请求下来的视频地址,然后简单的,赋一下值,非常OK.不过限自己练习用毕竟看需求的嘛,不多介绍复制用吧. 先看看效果大 ...

最新文章

  1. 【Smart_Point】动态内存与智能指针
  2. 在Azure上创建MYSQL服务
  3. CentOS 7安装教程(图文详解)如下
  4. 谋定技术加工领域 中国-巴对话(国际)农民丰收节贸易会
  5. 一文读懂除法溢出-使用汇编重定向0号中端(除法错误中断,比如,执行div指令产生的除法溢出)
  6. Java异常处理和常用类
  7. 线性筛素数的实现与证明
  8. 如果你是IT技术人员,请思考这15个问题
  9. vue获取当前月最后一天_10月的最后一天,有哪些不想谈恋爱适合发朋友圈的文案?...
  10. 从微软一站式代码库中学到的--跨域之间的session共享
  11. html 居中 center,html – 如何居中的元素 – 使用什么而不是align:center属性?
  12. ionic 幻灯指令 ion-slide-box
  13. sqoop连接hive和mysql_【数据平台】sqoop支持hive和mysql互导的基本语句格式
  14. hadoop2.x配合ZooKeeper集群环境搭建
  15. php7.4中让gd库支持jpeg格式
  16. 基于深度图像的手势识别算法研究
  17. 两台局域网电脑大数据传输详细教程
  18. android 填充内存方法,安卓快速填满手机内存(转载)
  19. 测量,信号处理中的精度分析 误差传播理论
  20. 【PHP开发】Mac系统配置MAMP+Thinkphp框架环境 教程(一)

热门文章

  1. Spring Cloud Hystrix——熔断器
  2. 搭建自己的GIT服务器
  3. matlab安装详解
  4. IOS自己主动布局中的浮动布局(6)----MyFloatLayout横空出世
  5. 一步步优化JVM四:决定Java堆的大小以及内存占用
  6. csync2+sqlite实现数据的高效实时的增量备份
  7. lua脚本移植到linux平台,如何将lua移植到arm平台的linux内核
  8. linux系统服务器怎么登录日志文件,Linux服务器查看日志的几种方法
  9. html 音标显示乱码,网页显示音标/拼音显示乱码的解决办法(.net)
  10. string是python内置函数吗_Python 字符串与内置函数(方法)