工作中遇到的问题
- 前端需要播放视频,使用字节流
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();
}
}
}