• springBoot视频在线播放,支持快进,分片播放


    1、主要是通过ResourceHttpRequestHandler类来实现,ResourceHttpRequestHandler本身支持分片加载,前端在请求头中携带Range: bytes = 0-5001,就可以从后台自动截取对应大小视频内容。

    第一步,先自定义实现一个ResourceHttpRequestHandler。代码如下:

    1. package com.tec666.moviebar.config;
    2. import org.springframework.core.io.FileSystemResource;
    3. import org.springframework.core.io.Resource;
    4. import org.springframework.stereotype.Component;
    5. import org.springframework.web.servlet.resource.ResourceHttpRequestHandler;
    6. import javax.servlet.http.HttpServletRequest;
    7. /**
    8. * @author longge93
    9. */
    10. @Component
    11. public class NonStaticResourceHttpRequestHandler extends ResourceHttpRequestHandler {
    12. public final static String ATTR_FILE = "NON-STATIC-FILE";
    13. @Override
    14. protected Resource getResource(HttpServletRequest request) {
    15. String filePath = (String) request.getAttribute(ATTR_FILE);
    16. return new FileSystemResource(filePath);
    17. }
    18. }

    第二步,在视频播放controller中,把本地文件路径传入ResourceHttpRequestHandler。代码如下:

    1. @Controller
    2. @RequestMapping(value = "/api/baseResource")
    3. public class BaseSourceApiController {
    4. @Autowired
    5. private NonStaticResourceHttpRequestHandler nonStaticResourceHttpRequestHandler;
    6. private final Logger logger = LoggerFactory.getLogger(this.getClass());
    7. @RequestMapping(value = "/video", method = RequestMethod.GET)
    8. public void video(
    9. HttpServletRequest request,
    10. HttpServletResponse response
    11. ) {
    12. try {
    13. String path = "D:/abc.mp4";
    14. File file = new File(path);
    15. if (file.exists()) {
    16. request.setAttribute(NonStaticResourceHttpRequestHandler.ATTR_FILE, path);
    17. nonStaticResourceHttpRequestHandler.handleRequest(request, response);
    18. } else {
    19. response.setStatus(HttpServletResponse.SC_NOT_FOUND);
    20. response.setCharacterEncoding(StandardCharsets.UTF_8.toString());
    21. }
    22. } catch (Exception e) {
    23. }
    24. }
    25. }

     

  • 相关阅读:
    开关电源模块 遥控开/关电路
    Git基础命令
    ZCMU--1577: 食堂的蛋饼
    Mybatis源码解析(七):Mapper代理原理
    扫码登录认证技术原理介绍及实践
    基于ARM的温度采集系统设计
    技术分享 | Jenkins通过什么方式报警?
    【远程软件安装记录】——nomachnine、todesk、向日葵、等远程软件在ubuntu中的安装教程
    86.(cesium之家)cesium叠加面接收阴影效果(gltf模型)
    levelDB引擎
  • 原文地址:https://blog.csdn.net/wsfzj123/article/details/133851725