Java后端处理video快进快退播放以及断点续传的原理和代码

Java后端处理video快进快退播放以及断点续传的原理和代码video 快进快退的原理 通过对所在服务器上的流媒体进行 skip 操作 然后再 response 的 header 里设置相应的 Content Range 以及其他属性 来控制视频流的快进快退的功能 断点续传的原理也是一样 相应代码如下 DOCTYPE tml htmllang en head metacharset UTF 8 title 播放视频 title lt metacharset UTF 8 head htmllang en

video 快进快退的原理:

通过对所在服务器上的流媒体进行skip操作,然后再response的header里设置相应的Content-Range以及其他属性,来控制视频流的快进快退的功能。

断点续传的原理也是一样!!!

相应代码如下:

 
   
   播放视频 
    
  

Java后端代码:

package ljxwtl.cn.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; @Controller public class FilePlayController { / * 下载 * @return * @throws IOException */ @RequestMapping(value = "/play", method = RequestMethod.GET) public void update(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException { BufferedInputStream bufferedInputStream = null; BufferedOutputStream bufferedOutputStream = null; String filePath = "/Users/tlzs/Downloads/movie.mp4"; try { File file = new File(filePath); int fSize = Integer.parseInt(String.valueOf(file.length())); httpServletResponse.setCharacterEncoding("utf-8"); httpServletResponse.setContentType("application/x-download"); httpServletResponse.setHeader("Accept-Ranges", "bytes"); httpServletResponse.setHeader("Content-Length", String.valueOf(fSize)); //对下载的文件或者播放的视频等取个名字 httpServletResponse.setHeader("Content-Disposition", "attachment;fileName=test.avi"); bufferedInputStream = new BufferedInputStream(new FileInputStream(file)); long position = 0; if (null != httpServletRequest.getHeader("Range")) { // 断点续传 httpServletResponse.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT); try { position = Long.parseLong(httpServletRequest.getHeader("Range").replaceAll("bytes=", "").replaceAll("-", "")); } catch (NumberFormatException e) { position = 0; } } bufferedOutputStream = new BufferedOutputStream(httpServletResponse.getOutputStream()); // Content-Range的格式:bytes POSITION - ( FILE_SIZE - 1)/FILE_SIZE httpServletResponse.setHeader("Content-Range", "bytes " + position + "-" + (fSize - 1) + "/" + fSize); bufferedInputStream.skip(position); byte[] buffer = new byte[1024 * 10]; int length = 0; while ((length = bufferedInputStream.read(buffer, 0, buffer.length)) != -1) { bufferedOutputStream.write(buffer, 0, length); //TimeUnit.MILLISECONDS.sleep(30); } } catch (Exception e) { } finally { try { if (null != bufferedOutputStream) bufferedOutputStream.flush(); if (null != bufferedInputStream) bufferedInputStream.close(); if (null != bufferedOutputStream) bufferedOutputStream.close(); } catch (IOException e) { } } } } 

Java不让video标签的视频快进的方法:

后端输出流的response里的header请求头里不传入Content-Length即可!!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/214853.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午3:17
下一篇 2026年3月18日 下午3:17


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号