SpringBoot静态视频实时播放的实现代码
问题描述
Spring Boot API 定义 GET 请求 API ,返回视频流。前端通过 <video> 标签加载并播放视频,效果是必须等整个视频资源全部加载到浏览器才能播放,⽽且 <video> 标签默认的进度条⽆法控制视频的播放。最终希望的效果是视频流边加载边播放,且播放器的控制正常使⽤。
解决⽅法
Spring Framework ⽂件请求处理
import io.FileSystemResource;
import io.Resource;
import org.springframework.stereotype.Component;
import org.springframework.source.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) Attribute(ATTR_FILE);
return new FileSystemResource(filePath);
}
}
Controller 层
@RestController
@AllArgsConstructor
public class FileRestController {
private final NonStaticResourceHttpRequestHandler nonStaticResourceHttpRequestHandler;
/**
* 预览视频⽂件, ⽀持 byte-range 请求
*/
@GetMapping("/video")
public void videoPreview(HttpServletRequest request, HttpServletResponse response) throws Exception {
String path = Parameter("path");
Path filePath = (path);
if (ists(filePath)) {
String mimeType = Files.probeContentType(filePath);
if (!StringUtils.isEmpty(mimeType)) {
response.setContentType(mimeType);
}
request.setAttribute(NonStaticResourceHttpRequestHandler.ATTR_FILE, filePath);
nonStaticResourceHttpRequestHandler.handleRequest(request, response);
} else {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
response.setCharacterEncoding(StandardCharsets.String());
}
spring教学视频}
}
相关资料
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。