转载自:javaweb 播放视频通过断点续传拖动滚动条

java播放视频如果需要后台处理,并不是请求xxx.mp4.当需要拖动进度条的时候部分浏览器是不行的,这里就需要断点续传。

直接上代码,通过video的src请求

/**

* video请求位置

* @param request

* @param response

*/

@RequestMapping(value = "/player", method = RequestMethod.GET)

public void player2(HttpServletRequest request, HttpServletResponse response) {

String path = request.getServletContext().getRealPath("/static/my/video/interview.mp4");

BufferedInputStream bis = null;

try {

File file = new File(path);

if (file.exists()) {

long p = 0L;

long toLength = 0L;

long contentLength = 0L;

int rangeSwitch = 0; // 0,从头开始的全文下载;1,从某字节开始的下载(bytes=27000-);2,从某字节开始到某字节结束的下载(bytes=27000-39000)

long fileLength;

String rangBytes = "";

fileLength = file.length();

// get file content

InputStream ins = new FileInputStream(file);

bis = new BufferedInputStream(ins);

// tell the client to allow accept-ranges

response.reset();

response.setHeader("Accept-Ranges", "bytes");

// client requests a file block download start byte

String range = request.getHeader("Range");

if (range != null && range.trim().length() > 0 && !"null".equals(range)) {

response.setStatus(javax.servlet.http.HttpServletResponse.SC_PARTIAL_CONTENT);

rangBytes = range.replaceAll("bytes=", "");

if (rangBytes.endsWith("-")) { // bytes=270000-

rangeSwitch = 1;

p = Long.parseLong(rangBytes.substring(0, rangBytes.indexOf("-")));

contentLength = fileLength - p; // 客户端请求的是270000之后的字节(包括bytes下标索引为270000的字节)

} else { // bytes=270000-320000

rangeSwitch = 2;

String temp1 = rangBytes.substring(0, rangBytes.indexOf("-"));

String temp2 = rangBytes.substring(rangBytes.indexOf("-") + 1, rangBytes.length());

p = Long.parseLong(temp1);

toLength = Long.parseLong(temp2);

contentLength = toLength - p + 1; // 客户端请求的是 270000-320000 之间的字节

}

} else {

contentLength = fileLength;

}

// 如果设设置了Content-Length,则客户端会自动进行多线程下载。如果不希望支持多线程,则不要设置这个参数。

// Content-Length: [文件的总大小] - [客户端请求的下载的文件块的开始字节]

response.setHeader("Content-Length", new Long(contentLength).toString());

// 断点开始

// 响应的格式是:

// Content-Range: bytes [文件块的开始字节]-[文件的总大小 - 1]/[文件的总大小]

if (rangeSwitch == 1) {

String contentRange = new StringBuffer("bytes ").append(new Long(p).toString()).append("-")

.append(new Long(fileLength - 1).toString()).append("/")

.append(new Long(fileLength).toString()).toString();

response.setHeader("Content-Range", contentRange);

bis.skip(p);

} else if (rangeSwitch == 2) {

String contentRange = range.replace("=", " ") + "/" + new Long(fileLength).toString();

response.setHeader("Content-Range", contentRange);

bis.skip(p);

} else {

String contentRange = new StringBuffer("bytes ").append("0-").append(fileLength - 1).append("/")

.append(fileLength).toString();

response.setHeader("Content-Range", contentRange);

}

String fileName = file.getName();

response.setContentType("application/octet-stream");

response.addHeader("Content-Disposition", "attachment;filename=" + fileName);

OutputStream out = response.getOutputStream();

int n = 0;

long readLength = 0;

int bsize = 1024;

byte[] bytes = new byte[bsize];

if (rangeSwitch == 2) {

// 针对 bytes=27000-39000 的请求,从27000开始写数据

while (readLength <= contentLength - bsize) {

n = bis.read(bytes);

readLength += n;

out.write(bytes, 0, n);

}

if (readLength <= contentLength) {

n = bis.read(bytes, 0, (int) (contentLength - readLength));

out.write(bytes, 0, n);

}

} else {

while ((n = bis.read(bytes)) != -1) {

out.write(bytes, 0, n);

}

}

out.flush();

out.close();

bis.close();

}

} catch (IOException ie) {

// 忽略 ClientAbortException 之类的异常

} catch (Exception e) {

e.printStackTrace();

}

}

在前端页面上的访问方式:

java实现断点续播_javaweb 播放视频通过断点续传拖动滚动条相关推荐

  1. 应对突发事件PPStream断点续播

    如果遇到断网停电等突发事件时不得不中断视频观看,令人烦恼的是,下次再度欣赏该节目时, 要么是重新开始看,要么是拖动进度条至上次中断的地方.好在PPStream为我们提供了断点续播功能, 使我们能重新启 ...

  2. java与js交互视频_Android与H5交互—Java调用Js、Js调Java、H5页面调用Android播放视频...

    content="ANZO,GAME,LOL,DNF,DOTA,撸啊撸,地下城与勇士,掌游宝,攻略,宝典,模拟器,加点,战报,英雄,最新,最全,最强,视频"> content ...

  3. java基于ssm开发的电视剧播放视频系统页面很漂亮哦

    简介 ssm开发的视频网站.本项目主要包括了视频展示和查询功能,用户中心,积分管理,管理员管理等功能. 演示视频 https://www.bilibili.com/video/BV1tT4y1N7t8 ...

  4. java ftp分片续传_Java写的支持断点续传的FTP

    Java写的支持断点续传的FTP 很不错的值得研究一下,结构比较清楚. 基类一: package ming.ftpsearch; public class FileInfo { public Stri ...

  5. java oss 断点上传文件_java实现oss断点续传

    bucketName ---oss上bucket的名字 key ---文件所在的文件夹加文件名 例如:我想把ceshi.txt 存放在bucket叫aa的里面叫bb的文件夹下.那么我的bucketNa ...

  6. html5视频播放器代码实例(含倍速、清晰度切换、续播)

    本文将对视频播放相关的功能进行说明(基于云平台),包括初始化播放器.播放器尺寸设置.视频切换.倍速切换.视频预览.自定义视频播放的开始/结束时间.禁止拖拽进度.播放器皮肤.控件按钮以及播放控制等.   ...

  7. Android视频编辑器(一)通过OpenGL预览、录制视频以及断点续录等

    前言 如今的视频类app可谓是如日中天,火的不行.比如美拍.快手.VUE.火山小视频.抖音小视频等等.而这类视频的最基础和核心的功能就是视频录制和视频编辑功能.包括了手机视频录制.美白.加滤镜.加水印 ...

  8. 播放视频和音频文件java

    import javazoom.jl.player.Player; import org.junit.jupiter.api.Test; import java.io.BufferedInputStr ...

  9. java jmf播放视频_使用JMF实现java视频播放器

    JMF这个多媒体开发框架太牛了,简单的几句代码就能实现一个视频播放器的开发,厉害,就是支持的格式少了一些,没关系,这个视频播放器可以播放mpg,avi,fvl等等,想播放其他的请开发自己的插件,下面将 ...

  10. java简单实现在线资源多线程下载,断点续存,限制最大正在下载数

    为什么要使用多线程下载,断点续存,限制最大正在下载数 多线程下载已经提高了下载的效率,但是当一些特殊情况发生的时候,我们需要对程序进行处理,这样效率会更高.比如,断电断网等造成下载中断,那么我们下一次 ...

最新文章

  1. 用户数年增长 300%,BitMax如何把握数字资产时代机遇?
  2. hdu4291 暴力循环节+矩阵快速幂
  3. ubuntu如何实现双屏显示(转)
  4. 关于windows注册表重定向和虚拟化分析
  5. 做一个java项目要经过那些正规的步骤
  6. SAP ABAP实用技巧介绍系列之 ABAP XSLT select keyword
  7. 两阶段3D目标检测网络 SIENet: Spatial Information Enhancement Network for 3D Object Detection from Point Cloud
  8. @Cacheable 指定缓存位置
  9. 信息学奥赛一本通 2035:【例5.2】平移数据
  10. 修改tomcat的conf/server.xml解决网页乱码
  11. OBJECT_MODE
  12. [BZOJ1998][Hnoi2010]Fsk物品调度
  13. python函数定义参数类型和返回值类型
  14. Java HashMap原理
  15. C程序的基本组成结构
  16. win 10 好吗?对比与ubuntu,对比于Mac呢?
  17. 构建者模式和抽象工厂模式的结合使用
  18. contextcapture多区块点云_Smart 3D (ContextCapture) 4.4.6版本最新功能
  19. Android 查询设备信息c/c++常用方法
  20. 关于ROS日志ROS_INFO需要知道的一些东西

热门文章

  1. UVA - 10106 Product
  2. Discuz最全的常见问题及故障整理
  3. 刘乾四川大学计算机学院刘乾,刘乾亮
  4. curl myip.ipip.net curl ip.cn curl cip.cc
  5. 计算化学对计算机知识的要求,计算化学软件对大学有机化学教学的应用
  6. 几个Python小案例, 爱上Python编程!
  7. 小葵花妈妈课堂之nginx必须要了解的优化九部曲!
  8. explain mysql语句_使用 explain 查看 MySQL 中 SQL 语句的执行情况 - 文章
  9. mathorcup历年优秀论文阿里云盘
  10. 世界第一代电子计算机诞生在,1、世界上第一台电子计算机诞生于