做Android需要做简单的视频缓存  videocache

首先为依赖包:

 compile 'com.danikula:videocache:2.7.1'

VideoCache工具类

package com.ys.hwpush.videoview;import android.annotation.SuppressLint;
import android.content.Context;import com.danikula.videocache.HttpProxyCacheServer;
import com.danikula.videocache.file.FileNameGenerator;
import java.io.File;/*** videocache 本地缓存、播放代理类 Created by liangzhen on 2018/07/30.*/
public class VideoCacheManager {private Context context;private HttpProxyCacheServer httpProxyCacheServer;@SuppressLint("StaticFieldLeak")private static volatile VideoCacheManager videoCacheManager;private String feed;private VideoCacheManager(Context context){this.context = context;}public static VideoCacheManager getVideoCacheManager(Context context) {if (videoCacheManager == null){synchronized (VideoCacheManager.class){if (videoCacheManager == null){videoCacheManager = new VideoCacheManager(context);}}}return videoCacheManager;}//设置一下ID(用于缓存的名字)public VideoCacheManager setFeed(String feed){this.feed = feed;return this;}public String getVideoCacheUriDir(){String videoCachePath = context.getExternalFilesDir("video_cache").getAbsolutePath();makeMultiDirs(videoCachePath);return videoCachePath;}public HttpProxyCacheServer getProxy() {if(httpProxyCacheServer == null){httpProxyCacheServer = newProxy();}return httpProxyCacheServer;}//用于做一些缓存规则private HttpProxyCacheServer newProxy() {return new HttpProxyCacheServer.Builder(context).cacheDirectory(new File(getVideoCacheUriDir())).maxCacheFilesCount(5).maxCacheSize(1024 * 1024 * 300).fileNameGenerator(new FileNameGenerator() {@Overridepublic String generate(String url) {return feed == null ? "" : feed + ".mp4";}}).build();}//创建文件夹public static boolean makeMultiDirs(String dirs) {boolean mkOK = false;File file = new File(dirs);if (!file.exists()) {mkOK = file.mkdirs();}return mkOK;}}

Activity的代码模拟

package com.ys.hwpush.videoview;import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.MediaController;
import android.widget.Toast;
import android.widget.VideoView;import com.danikula.videocache.HttpProxyCacheServer;
import com.ys.hwpush.R;import java.util.ArrayList;
import java.util.List;public class VideoPlayActivity extends AppCompatActivity {private VideoCacheManager cacheManager;//A是作为下标操作private int A=0;private List<String> list;private VideoView videoView;private MediaController controller;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_video_play);list = new ArrayList<>();list.add("http://cdn1.cooolar.com/feed_video/2018-04-26/15247317868073.mp4");list.add("http://cdn1.cooolar.com/feed_video/2018-02-25/15195224284882.mp4");list.add("http://cdn1.cooolar.com/feed_video/2018-04-05/15229203431059.mp4");list.add("http://cdn1.cooolar.com/feed_video/2018-03-16/15212035563102.mp4");list.add("http://cdn1.cooolar.com/feed_video/2018-03-23/15217943047868.mp4");list.add("http://cdn1.cooolar.com/feed_video/2018-04-12/15235107918092.mp4");list.add("http://cdn1.cooolar.com/feed_video/2018-03-24/15218702781120.mp4");list.add("http://cdn1.cooolar.com/feed_video/2018-03-30/15224013517025.mp4");Button up = findViewById(R.id.but_up);Button but= findViewById(R.id.but);videoView = findViewById(R.id.videoView);cacheManager = VideoCacheManager.getVideoCacheManager(this);controller = new MediaController(this);playVideo(A);up.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {A=A-1;if(A<0){A=A+1;Toast.makeText(VideoPlayActivity.this,"上面没有视频了",Toast.LENGTH_SHORT).show();}else{playVideo(A);}}});but.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {A=A+1;if(A>list.size()-1){A=A-1;Toast.makeText(VideoPlayActivity.this,"没有更多视频了",Toast.LENGTH_SHORT).show();}else{playVideo(A);}}});}public void playVideo(int A){videoView.stopPlayback();cacheManager.setFeed("video"+A);HttpProxyCacheServer proxy = cacheManager.getProxy();String proxyUrl = proxy.getProxyUrl(list.get(A));Uri uri = Uri.parse(proxyUrl);//设置视频路径videoView.setVideoURI(uri);//关联管理器videoView.setMediaController(controller);controller.setAnchorView(videoView);//开始播放视频videoView.start();}//拦截了返回键@Overridepublic boolean onKeyUp(int keyCode, KeyEvent event) {return false;}
}

布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".videoview.VideoPlayActivity"><VideoViewandroid:id="@+id/videoView"android:layout_width="match_parent"android:layout_height="match_parent" /><Buttonandroid:id="@+id/but_up"android:text="上一個"android:layout_width="wrap_content"android:layout_height="wrap_content" /><Buttonandroid:layout_below="@id/but_up"android:id="@+id/but"android:text="下一個"android:layout_width="wrap_content"android:layout_height="wrap_content" /></RelativeLayout>

视频缓存VideoCache相关推荐

  1. 浅谈Android视频缓存库

    背景 我们都了解播放器的作用就是把音视频压缩数据转换成原始的音视频数据渲染出来,这样我们就可以看到画面.听到声音了.这里的播放器就存在两个问题,第一个问题是视频源存在云端,我们每次看完视频之后重新观看 ...

  2. 微信看一看小程序视频缓存到手机的位置

    使用华为p30pro手机,鸿蒙系统,找到了微信看一看小视频缓存的文件,路径 /Android/data/com.tencent.mm/cache/videocache/下,找到了appbrand1和a ...

  3. 视频缓存AndroidVideoCache

    今天分享一个开源库 AndroidVideoCache .这个库主要是做视频缓存管理功能,支持边下边播,离线播放,缓存管理等. 用过MediaPlayer的小伙伴都知道,可以支持在线播放和播放本地资源 ...

  4. android视频缓存框架 [AndroidVideoCache](https://github.com/danikula/AndroidVideoCache) 源码解析与评估

    文章目录 android视频缓存框架 [AndroidVideoCache](https://github.com/danikula/AndroidVideoCache) 源码解析与评估 引言 使用方 ...

  5. 电脑端bilibili视频缓存合并视频的解惑

    文章目录 前言 一.为什么不能直接修改文件格式 二.怎么删 三.怎么合并 总结 前言 与手机同分辨率的缓存相比,电脑端视频码率更高,相应的清晰度更高,相应的文件占用空间也更大.但电脑端bilibili ...

  6. 视频缓存合成工具分享

    具体操作步骤: 1:确保缓存的视频已缓存完成(这里使用的是腾讯视频) 2:打开缓存视频合成软件即可查看到检测的可合成视频(可显示来源及文件大小等) 如果是M3U8类似的没有则可以扫描一下 继续说正常视 ...

  7. uc浏览器视频缓存合并工具

    1.该软件用于将uc浏览器中零散的视频缓存切片处理成完整的视频文件. 开发语言:C# 开发工具: Visual Studio 2017 Community 实例图示: 程序代码下载地址 windows ...

  8. 2022年11月21 B站视频缓存二进制解析

    B站电脑视频缓存解析 二进制文件分析 步骤1,删除开头9个0: 步骤2,"$"(24) 换成空格(20); 步骤3,删除"avc1"(61 76 63 31) ...

  9. 反思 | Android 音视频缓存机制的系统性设计

    反思 系列博客是我的一种新学习方式的尝试,该系列起源和目录请参考 这里 . 背景 在自媒体的时代,音视频播放 俨然已成为内容类型 APP 最基础的能力,对于 Android 开发者而言,无论是 Goo ...

最新文章

  1. zend studio让编译器导入项目为utf-8如何设置
  2. 调用枚举接口重写方法提示找不到符号_看看人家那后端API接口写得,那叫一个巴适~...
  3. 设计模式----2(简单工厂模式的概念,简单工厂模式的实现,简单工厂模式的优缺点)
  4. maven snapshot和release版本号之间的差
  5. SpringCloud创建Config Client配置读取
  6. (转载)grep 行号正则匹配字符有颜色
  7. EF里查看/修改实体的当前值、原始值和数据库值
  8. Java Tomcat SSL 服务端/客户端双向认证
  9. P4213 【模板】杜教筛(杜教筛)题解
  10. Fullpage:基础学习
  11. 《演讲之禅》迷你书免费下载 每小时30000美元的秘诀
  12. UBUNTU安装之后要配置的内容
  13. ORACLE账号注册之后,要修改密码才能用
  14. 赵云传 java游戏_三国赵云传2RPG版
  15. 新电商正面迎战“阅读焦虑”
  16. 清华大学计算机考研信息汇总
  17. 这篇文章应该在《新闻联播》连续报道一个月--武汉大学毕业生的反思
  18. 【C语言】calloc函数
  19. 安卓实现仿系统设置界面
  20. PGCrypto 加密组件使用

热门文章

  1. 10086登录JS加解密充值讲解
  2. matlab植物,matlab分形植物模拟
  3. 轨迹发生器 matlab,GPS和INS组合导航程序,其中包括轨迹发生器、KALMAN滤波、模型建立、伪距伪距率组合方式进行仿真...
  4. flutter ios打包_安卓开发者如何使用Flutter打包IOS应用
  5. excel学习-基础日期函数(today+now+year+month+day+date+本月最后一天)
  6. 匠心锁致·奋斗有我|中科易安无线智能门锁2021奋斗者计划来袭
  7. PLMN与RAT/Cell/运营商间的关系
  8. 微服务的精髓,Spring Cloud 到底该学到什么程度才算精通?
  9. 软件著作权和商业秘密权
  10. 电驱动机电一体化仿真