SpringBoot视频流的使用

165 阅读1分钟

工作中遇到的问题

  • 前端需要播放视频,使用字节流outputStream给到前端,页面加载所需时间太久;因此使用视频流进行优化。

SpringBoot视频流的使用

1、视频流和音频流加载设置

@Component  
public class MedioHttpRequestHandler extends ResourceHttpRequestHandler {  
    
    public final static String ATTR_FILE = "RESOURCE_FILE";  
  
    @Override  
    protected Resource getResource(HttpServletRequest request) {  
        final File file = (File) request.getAttribute(ATTR_FILE);  
        return new FileSystemResource(file);  
    }  
}

2、使用视频流

public class TrainingMaterialsService {

    @Resource  
    private MedioHttpRequestHandler medioHttpRequestHandler;
    
    public void previewObjTrainingMaterials(String name, HttpServletRequest request, HttpServletResponse response) {  
        QueryWrapper<TrainingMaterialsEntity> queryWrapper = new QueryWrapper<>();  
        queryWrapper.eq("name", name);  
        TrainingMaterialsEntity entity = trainingMaterialsMapper.selectOne(queryWrapper);  
        if (entity == null) {  
            return;  
        }  

        File file;  
        try {  
            // 获取文件
            file = fileService.getFile("trainingMaterials/" + entity.getFileStoreName());  
            response.setContentType("video/mp4");  
            request.setAttribute(MedioHttpRequestHandler.ATTR_FILE, file);  
            medioHttpRequestHandler.handleRequest(request, response);  
        } catch (Exception e) {  
            response.setHeader("Content-type", "text/html;charset=UTF-8");  
            String data = "预览失败";  
            OutputStream ps;  
            try {  
                ps = response.getOutputStream();  
                ps.write(data.getBytes(StandardCharsets.UTF_8));  
            } catch (IOException ioException) {  
                ioException.printStackTrace();  
            }  
            e.printStackTrace();  
        }
    }
}