安卓基于JCVideoPlayer 播放视频(本地网络),基于java计数器实现视频轮播
Posted 无名之辈之码谷娃
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓基于JCVideoPlayer 播放视频(本地网络),基于java计数器实现视频轮播相关的知识,希望对你有一定的参考价值。
JCVideoPlayer 是一款开源的播放器
如果通过控件播放网络视频和本地视频?
代码很简单:
JCVideoPlayer.toFullscreenActivity(this,
"http://vfx.mtime.cn/Video/2019/03/09/mp4/190309153658147087.mp4",
"http://p.qpic.cn/videoyun/0/2449_43b6f696980311e59ed467f22794e792_1/640",
"简单代码实现视频播放");
一行代码搞定视频播放。
我们的需求实现:
1,视频支持离线播放,
2,视频播放最新视频。
3,视频支持视频轮播。
视频下载播放?
1,获取当前sdk卡的缓存目录,然后把视频通过file文件流下载到磁盘当中。
2,下载视频需要注意网络问题,下载视频是无法播放的。
static public void getCreateVidioDir()
try
String bufferDir = Environment.getExternalStorageDirectory()
.getAbsolutePath() + "/videos/files";
new File(bufferDir).mkdirs();
catch (Exception e)
e.printStackTrace();
初始化视频,通过java程序实现轮播。
/**
* 初始化视频数据
*/
@RequiresApi(api = Build.VERSION_CODES.N)
public static void initVideoList() throws Exception
File file = new File(filePath);
if(file.list() == null || file.list().length ==0 )
return;
List<String> list = Arrays.asList(file.list());
Collections.sort(list);
System.out.println(list);
//再反转
Collections.reverse(list);
Map<Integer, VideoEachPlayUtlis.VideoParms> videoParmsMap = new LinkedHashMap<>();
String defulatThumb ="http://p.qpic.cn/videoyun/0/2449_43b6f696980311e59ed467f22794e792_1/640";
//排序获取最大的下标开始
for(int i =0 ; i<list.size(); i++)
int index = list.size()-i;
String videoUrl = list.get(i);
videoParmsMap.put(index, new VideoEachPlayUtlis.VideoParms(videoUrl
, defulatThumb, "测试-标题---"+index));
VideoEachPlayUtlis.setVideoParmsMap(videoParmsMap);
初始化线程池定时线程:
/**
* 初始化定时线程
*/
public void initTaskTherad()
ScheduledExecutorService service = Executors.newScheduledThreadPool(2);
//15分钟下载一次视频
service.scheduleAtFixedRate(new VedioTask(),15, 15, TimeUnit.MINUTES);
//30分钟上报一次心跳
service.scheduleAtFixedRate(new HeartbeatTask(),30, 30, TimeUnit.MINUTES);
通过java程序下标控制视频轮播,初始化视频设置下标,根据下标的增长获取指定视频的下标播放视频:
if (event.type == VideoEvents.POINT_AUTO_COMPLETE_FULLSCREEN)
init_count++;
if (init_count % 2 == 0)
init_count = 2;
if(VideoEachPlayUtlis.getVideoParmsMap().isEmpty())
//播放默认视频
return;
Object[] obj = VideoEachPlayUtlis.getVideoParmsMap().keySet().toArray();
Arrays.sort(obj);
Integer key = Integer.valueOf(obj[0].toString());
nowIndex = nowIndex == null ? initNum : nowIndex - 1;
if (key == nowIndex)
nowIndex = key;
else if (nowIndex < key)
nowIndex = Integer.valueOf(obj[obj.length - 1].toString());
VideoEachPlayUtlis.VideoParms videoParms = VideoEachPlayUtlis.getVideoParmsMap().get(nowIndex);
JCVideoPlayer.toFullscreenActivity(this,
filePath+videoParms.getUrl(),
videoParms.getThumb(),
videoParms.getTitle());
package com.ocwvar.video_svg.task;
import android.util.Log;
import com.ocwvar.video_svg.utils.Contans;
import com.ocwvar.video_svg.utils.HttpGetProxy;
import com.ocwvar.video_svg.utils.VideoEachPlayUtlis;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* 定时拉取最新视频的线程
*/
public class VedioTask implements Runnable
private static volatile int mTargetSize;
String filePath = "/storage/emulated/0/videos/files/";
public static int getmTargetSize()
return mTargetSize;
public static void setmTargetSize(int mTargetSize)
VedioTask.mTargetSize = mTargetSize;
@Override
public void run()
String url = "http://vfx.mtime.cn/Video/2019/03/09/mp4/190309153658147087.mp4";
int PREBUFFER_SIZE = 600000;
HttpGetProxy proxy = new HttpGetProxy(filePath,// 预加载视频文件存放路径
PREBUFFER_SIZE,// 预加载体积
100);// 预加载文件上限
// 设置视频ID
String id = (System.currentTimeMillis() / 1000) + "";
try
// 开始缓存视频
download(url,filePath+id);
File file = new File(filePath + id);
//判断下载的视频是否存在
if (file.exists())
Log.i(file.length() + "", VedioTask.getmTargetSize() + "");
//判断文件大小是否下载成功
if (file.length() != 0 && file.length() >= VedioTask.getmTargetSize())
Log.i("视频下载成功", "返回视频状态");
swapCache();
else
file.delete();
catch (Exception e)
e.printStackTrace();
/**
* 更新轮播视频的状态
*/
public void swapCache()
File file = new File(Contans.filePath);
List<String> list = Arrays.asList(file.list());
Collections.sort(list);
//再反转
Collections.reverse(list);
Map<Integer, VideoEachPlayUtlis.VideoParms> sowapCatche = new LinkedHashMap<>();
String defulatThumb = "http://p.qpic.cn/videoyun/0/2449_43b6f696980311e59ed467f22794e792_1/640";
for (int i = 0; i < list.size(); i++)
int index = list.size() - i;
String videoUrl = list.get(i);
sowapCatche.put(index, new VideoEachPlayUtlis.VideoParms(videoUrl
, defulatThumb, "测试-标题---" + index));
Log.i("清除缓存", VideoEachPlayUtlis.getVideoParmsMap().size() + "");
VideoEachPlayUtlis.getVideoParmsMap().clear();
Log.i("复制缓存", sowapCatche.size() + "");
VideoEachPlayUtlis.setVideoParmsMap(sowapCatche);
private void download(String mUrl, String mPath) throws MalformedURLException
// 下载网络文件
int byteread = 0;
int mDownloadSize = 0;
URL url = new URL(mUrl);
URLConnection conn = null;
InputStream is = null;
FileOutputStream os = null;
try
conn = url.openConnection();
is = conn.getInputStream();
os = new FileOutputStream(mPath);
byte[] buffer = new byte[1204];
int length;
while ((byteread = is.read(buffer)) != -1)
mDownloadSize += byteread;
//System.out.println(bytesum);
os.write(buffer, 0, byteread);
mTargetSize = mDownloadSize;
Log.i("文件下载成功-------", mPath);
catch (FileNotFoundException e)
e.printStackTrace();
catch (IOException e)
e.printStackTrace();
finally
VedioTask.setmTargetSize(mTargetSize);
// 关闭输出流
if (os != null)
try
os.close();
catch (IOException e)
e.printStackTrace();
// 关闭输入流
if (is != null)
try
is.close();
catch (IOException e)
e.printStackTrace();
定时下载视频到本地,根据时间戳生成排序。
我们的程序代码就写好了,现在通过模拟器播放视频。
连接到模拟器:adb connect 127.0.0.1:7555
视频轮播和本地我们已经处理好了。由于安卓就是java写的,所以java开发起来还是有一定的基础,都是变通的。迎难而上。
jiecaovideoplayer
1.简介
其是一个很强大的视频制造工具。 类似效果图如下:
2.简单用法
1)集成jcvideoplayer-lib
2)引用fm.jiecao.jcvideoplayer_lib.JCVideoPlayerStandard组件
3)最后加载要播放视频的路径,图片的路径,视频的标题等
3.在该基础上再自定义效果
核心:继承JCVideoPlayer来进行自定义
4.使用webview来使用该组件
1)写好JCCallBack 类,其是在html文件中进行使用的一个监听类,并在这边利用我们的简单用法来选择播放视频的路径,图片,标题和视频的大小等。
2)在html中利用这个类进行赋值,播放
以上是关于安卓基于JCVideoPlayer 播放视频(本地网络),基于java计数器实现视频轮播的主要内容,如果未能解决你的问题,请参考以下文章