android获取网络视频缩略图,Android 获取视频(本地和网络)缩略图的解决方案
在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 获取视频(本地和网络)缩略图的解决方案相关推荐
- android实现本地视频播放功能,Android开发 MediaPlayer入门_播放本地视频
前言 MediaPlayer,可以播放视频/音频,并且它支持本地和网络文件的播放.本片博客作为入门教程,先以最通俗的方式解释播放文件本地视频. 实现流程 获取权限 保持屏幕常亮 初始化SurfaceV ...
- 【音视频】使用FFMPEG读取本地|网络音视频流(3-4)
前言:继上一篇推送网络流之后,最近又研究了一下读取网络流(顺便还有本地流)作为音视频源,此篇作为记录. 一.本地|网络视频源 1.初始化视频源 int VStreamCaptor::init(cons ...
- 从本地或者网络读取图片,并转换为Bitmap图片
在做android项目时,我们经常需要从本地或者网络读取图片,并转换为Bitmap图片,以便使用,下面是读取本地图片并转换的方法: Java代码 /** * 得到本地或者网络上的bitmap ur ...
- IBM Cloud VPC网络与本地办公网络的互通
VPN 连接(VPN Connections)是一种基于网络隧道技术,实现本地数据中心与公有云上资源连通的传输服务,它能帮您在 Internet 上快速构建一条安全.可靠的加密通道.VPN 连接具有配 ...
- 笔记本显示网络电缆被拔出怎么解决_本地连接网络电缆被拔出 本地连接网络电缆被拔出解决方法【图文】...
网络可以说是我们日常生活中必不可少的一部分了,因此网络的使用,我们能够实现很多无论是工作方面还是在学习上,亦或是日常生活中的便利.但是有很多用户反映,自己在日常使用网络的过程中总是会显示"本 ...
- 5G系统——本地数据网络(LADN)
Local Area Data Network(LADN):本地数据网络 LADN service area:本地数据网络服务区 UE只有本地数据网络的服务区才能通过连接本地数据网络的PDU会话访问本 ...
- android获取图片缩略图,Android系获取图片和视频的缩略图
获取手机里视频缩略图: public static Bitmap getVideoThumbnail(ContentResolver cr,Uri uri) { Bitmap bitmap = nul ...
- Android之使用ThumbnailUtils类来获取视频第一帧缩略图
一.首先,来介绍ThumbnailUtils类,此类位于android.media包下,此类有一个公有的无参构造函数,有三个静态的公有方法,一个用来获取视频第一帧得到的Bitmap,另外两个方法用 ...
- android 获取网络视频资源,Android 加载网络视频(url地址)第三方框架简用
正好最近做项目有个需要加载网络视频技术,就找了找,碰到了这个开源的框架.主要还是网络请求下来的视频地址,然后简单的,赋一下值,非常OK.不过限自己练习用毕竟看需求的嘛,不多介绍复制用吧. 先看看效果大 ...
最新文章
- 【Smart_Point】动态内存与智能指针
- 在Azure上创建MYSQL服务
- CentOS 7安装教程(图文详解)如下
- 谋定技术加工领域 中国-巴对话(国际)农民丰收节贸易会
- 一文读懂除法溢出-使用汇编重定向0号中端(除法错误中断,比如,执行div指令产生的除法溢出)
- Java异常处理和常用类
- 线性筛素数的实现与证明
- 如果你是IT技术人员,请思考这15个问题
- vue获取当前月最后一天_10月的最后一天,有哪些不想谈恋爱适合发朋友圈的文案?...
- 从微软一站式代码库中学到的--跨域之间的session共享
- html 居中 center,html – 如何居中的元素 – 使用什么而不是align:center属性?
- ionic 幻灯指令 ion-slide-box
- sqoop连接hive和mysql_【数据平台】sqoop支持hive和mysql互导的基本语句格式
- hadoop2.x配合ZooKeeper集群环境搭建
- php7.4中让gd库支持jpeg格式
- 基于深度图像的手势识别算法研究
- 两台局域网电脑大数据传输详细教程
- android 填充内存方法,安卓快速填满手机内存(转载)
- 测量,信号处理中的精度分析 误差传播理论
- 【PHP开发】Mac系统配置MAMP+Thinkphp框架环境 教程(一)
热门文章
- Spring Cloud Hystrix——熔断器
- 搭建自己的GIT服务器
- matlab安装详解
- IOS自己主动布局中的浮动布局(6)----MyFloatLayout横空出世
- 一步步优化JVM四:决定Java堆的大小以及内存占用
- csync2+sqlite实现数据的高效实时的增量备份
- lua脚本移植到linux平台,如何将lua移植到arm平台的linux内核
- linux系统服务器怎么登录日志文件,Linux服务器查看日志的几种方法
- html 音标显示乱码,网页显示音标/拼音显示乱码的解决办法(.net)
- string是python内置函数吗_Python 字符串与内置函数(方法)