haoxiaolan 2023-08-29 12:41 采纳率: 34.7%
浏览 28
已结题

ResourceHttpRequestHandler 实现视频流

springboot返回视频流


package com.dplyer.demos.utils;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.resource.ResourceHttpRequestHandler;
import javax.servlet.http.HttpServletRequest;
import java.nio.file.Path;
//返回视频流
@Component
public class NonStaticResourceHttpRequestHandler extends ResourceHttpRequestHandler {
    public final static String ATTR_FILE = "NON-STATIC-FILE";

    @Override
    protected Resource getResource(HttpServletRequest request) {
        final Path filePath = (Path) request.getAttribute(ATTR_FILE);
        return new FileSystemResource(filePath);
    }

}
@RestController
@RequestMapping("/abc")
@AllArgsConstructor
public class DplayerController {

    //引入返回视频流的组件
    private final NonStaticResourceHttpRequestHandler nonStaticResourceHttpRequestHandler;
    @GetMapping("/d")
    public void videoPreview(HttpServletRequest request, HttpServletResponse response) throws Exception {

        //从视频信息中单独把视频路径信息拿出来保存
        String videoPathUrl="src/main/resources/static/my.mp4";

        //保存视频磁盘路径
        Path filePath = Paths.get(videoPathUrl);
        //Files.exists:用来测试路径文件是否存在
        if (Files.exists(filePath)) {
            //获取视频的类型,比如是MP4这样
            String mimeType = Files.probeContentType(filePath);
            if (StringUtils.hasText(mimeType)) {
                //判断类型,根据不同的类型文件来处理对应的数据
                response.setContentType(mimeType);
            }
            //转换视频流部分
            request.setAttribute(NonStaticResourceHttpRequestHandler.ATTR_FILE, filePath);
            nonStaticResourceHttpRequestHandler.handleRequest(request, response);
        } else {
            response.setStatus(HttpServletResponse.SC_NOT_FOUND);
            response.setCharacterEncoding(StandardCharsets.UTF_8.toString());
        }
    }
}

ResourceHttpRequestHandler 的作用是什么,是如何实现向前端返回视频流?

  • 写回答

1条回答 默认 最新

  • 一位热心程序猿 2023-08-29 13:11
    关注

    NonStaticResourceHttpRequestHandler 继承了 ResourceHttpRequestHandler,
    将文件路径 filePath 存储在请求的属性中(使用 request.setAttribute),这样 NonStaticResourceHttpRequestHandler 就可以使用这个路径来返回资源。
    最后,调用 nonStaticResourceHttpRequestHandler.handleRequest 方法,将资源作为响应返回给客户端。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月10日
  • 创建了问题 8月29日

悬赏问题

  • ¥15 mmo能不能做客户端怪物
  • ¥15 osm下载到arcgis出错
  • ¥15 Dell g15 每次打开eiq portal后3分钟内自动退出
  • ¥200 使用python编写程序,采用socket方式获取网页实时刷新的数据,能定时print()出来就行。
  • ¥15 matlab如何根据图片中的公式绘制e和v的曲线图
  • ¥15 我想用Python(Django)+Vue搭建一个用户登录界面,但是在运行npm run serve时报错了如何解决?
  • ¥15 QQ邮箱过期怎么恢复?
  • ¥15 登录他人的vue项目显示服务器错误
  • ¥15 (标签-android|关键词-app)
  • ¥15 comsol仿真压阻传感器