Android视频缓存机制——AndroidVideoCache
首先简单讲下AndroidVideoCache的缓存机制-LruCache.
缓存策略主要包含缓存的添加、获取和删除这三类操作。
LruCache就是利用了LinkedHashMap的访问模式
设置LinkedHashMap 的构造参数是accessOrder = true,
所以每次使用缓存时,都会将数据移至队尾。
因为最新访问的数据都在队尾,如果容量大于一开始设置的max,就删除队首的元素,知道小于max。
使用AndroidVedioCache
在build.gradle中设置
repositories {jcenter()}dependencies {compile 'com.danikula:videocache:2.7.1'
}
首先,我们确定一个文件夹存放文件(当然也可以默认)
public static File getVedioFile() {String path = Environment.getExternalStorageDirectory().getPath() + "/cloudvedio";File file = new File(path);if (!file.exists()) {file.mkdir();}return file;}
其次,在Application中定义
private HttpProxyCacheServer proxy;public static HttpProxyCacheServer getProxy() {return getInstance().proxy == null ? (getInstance().proxy = getInstance().newProxy()) : getInstance().proxy;}private HttpProxyCacheServer newProxy() {return new HttpProxyCacheServer.Builder(this).cacheDirectory(getVedioFile())//缓存的文件夹,默认就不写.maxCacheSize(512 * 1024 * 1024) // 512mb 最大大小,也可为最大个数.build();}
使用即是替换掉原有url,比如替换视频原有url
HttpProxyCacheServer proxy = Application.getProxy();
String proxyUrl = proxy.getProxyUrl(videoUrl);//原来url是videoUrl,转化为proxyUrl
videoPlayer.setUp(proxyUrl, null);
//这里第一次请求是url,第二次就会变成file:///....达到缓存的作用
顺便记一笔清除缓存的
/*** 获取指定文件夹** @param f* @return* @throws Exception*/public static long getFileSizes(File f) throws Exception {long size = 0;File flist[] = f.listFiles();for (int i = 0; i < flist.length; i++) {if (flist[i].isDirectory()) {size = size + getFileSizes(flist[i]);} else {size = size + getFileSize(flist[i]);}}return size;}/*** 获取指定文件大小** @param* @return* @throws Exception*/public static long getFileSize(File file) throws Exception {long size = 0;if (file.exists()) {FileInputStream fis = null;fis = new FileInputStream(file);size = fis.available();} else {file.createNewFile();Log.e("获取文件大小", "文件不存在!");}return size;}/*** 删除指定文件夹内文件* @param file*/private static void deleteFile(File file) {if (file.isDirectory()) {File[] files = file.listFiles();for (int i = 0; i < files.length; i++) {File f = files[i];deleteFile(f);}
// file.delete();//如要保留文件夹,只删除文件,请注释这行} else if (file.exists()) {file.delete();}}
Android视频缓存机制——AndroidVideoCache相关推荐
- android视频缓存框架 [AndroidVideoCache](https://github.com/danikula/AndroidVideoCache) 源码解析与评估
文章目录 android视频缓存框架 [AndroidVideoCache](https://github.com/danikula/AndroidVideoCache) 源码解析与评估 引言 使用方 ...
- 音视频开发(三十九):Android视频缓存之AndroidVideoCache
目录 背景 AndroidVideoCache简单使用 实现原理 源码分析 AndroidVideoCache的不足 一.背景 播放音视频时,播放器数据的请求是由播放器内部发起的,我们只是提供了一个u ...
- 反思 | Android 音视频缓存机制的系统性设计
反思 系列博客是我的一种新学习方式的尝试,该系列起源和目录请参考 这里 . 背景 在自媒体的时代,音视频播放 俨然已成为内容类型 APP 最基础的能力,对于 Android 开发者而言,无论是 Goo ...
- 浅谈Android视频缓存库
背景 我们都了解播放器的作用就是把音视频压缩数据转换成原始的音视频数据渲染出来,这样我们就可以看到画面.听到声音了.这里的播放器就存在两个问题,第一个问题是视频源存在云端,我们每次看完视频之后重新观看 ...
- Android 利用缓存机制实现文件下载
http://www.cctime.com/html/2011-11-29/201111291037553094_2.htm http://blog.csdn.net/life02/article/d ...
- Android客户端缓存机制(文字缓存和多媒体文件缓存)
概述: 客户端缓存机制是Android应用开发中非常重要的一项工作,使用缓存机制不仅仅可以为用户节省3G流量,同时在用户体验方面也是非常好的选择. 缓存机制分为两部分,一部分是文字缓存,另一部分是多媒 ...
- Android 图片缓存机制
1.采用线程池 2.内存缓存+文件缓存 3.内存缓存中网上很多是采用SoftReference来防止堆溢出,这儿严格限制只能使用最大JVM内存的1/4 4.对下载的图片进行按比例缩放,以减少内存 ...
- Android:Android9.0使用 AndroidVideoCache时不能缓存播放视频的解决
一.问题现象: 项目中使用 https://github.com/danikula/AndroidVideoCache 作为视频缓存组件,但是在9.0手机上无法正常缓存,并且报错: 1.详细错误截图 ...
- android 视频的缩略图 缓存机制和 异步加载缩略图
在这次的工作开发项目中,涉及到一个视频缩略图的视频列表:这个在大家看来,制作视频缩略图就是两行代码就搞定的事.确实是这样的,百度一下,每个帖子都知道制作视频缩略图的方法,在这里确实也是一样的,但是我要 ...
最新文章
- Python自定义主从分布式架构
- SpringBoot 集成 Elasticsearch
- ios一个app调起另一个app_电商app开发价格:制作一个电商app需要多少钱?
- Part2_1 Urllib的get请求和post请求
- SIFT中LoG和DoG比较
- Zepto 与 jQuery 的区别 小结
- AI行业真实现状:做芯片没工作,做视觉、语音血赚
- vivo21a点击android版本,VIVO X21A原厂线刷救砖包_内附工具可救砖
- winform打开PDF,显示在窗口
- YApi接口平台-接口挡板
- 去除趋势杀软的退出密码
- Django笔记十一之外键查询优化select_related和prefetch_related
- 只要3步,如何用Python发送通知到微信?
- 提升工作效率五步走之后三步 2016-09-19 刘思佳 思佳真探
- 『NLP经典项目集』10:使用预训练模型优化快递单信息抽取
- 2020年软件评测师真题精选
- SPI在linux3.14.78 FS_S5PC100(Cortex A8)和S3C2440上驱动移植(deep dive)_0
- 学术沙龙-写好综述-读书笔记分享和讨论
- matlab park clark,[转载]park,clark和ipark浅析
- 毕业设计--------登录鉴权
热门文章
- 首先,打破一切常规 学习笔记 之一
- speedoffice中如何美化表格
- SyntheticChineseStringDataset 标签
- nrf51822 --- 外部中断 (按键)
- signature=9072fdce05d2274ff4c1882d408ebeef,Brassica seeds
- 细数Mac上那些好用且免费的软件(四)
- 指南:内网穿透与DDNS动态域名解析区别,一篇看懂
- 【slam十四讲第二版】【课本例题代码向】【第七讲~视觉里程计Ⅱ】【使用LK光流(cv)】【高斯牛顿法实现单层光流和多层光流】【实现单层直接法和多层直接法】
- linux ubuntu桌面进程,21款必不可少的Ubuntu桌面应用程序
- go每日新闻(2021-09-23)——Go 微服务框架对比