随着国内带宽降费提速日益普及,与此同时移动通信技术也进一步提升,视频,直播这一类业务需求都离不开推流这一核心技术点。最近尝试了一次SpringMVC的H264流响应方法,SpringMVC提供了一个ResourceRegion对象,类比于RandomAccessFile,其抽象了资源的随机位置响应方法,所以只要用ResourceRegion响应,即可完成一个简单的H264流响应。
@GetMapping("/play/{name}") public ResponseEntity<ResourceRegion> play(@PathVariable("name") String name,@RequestHeader HttpHeaders httpHeaders) throws IOException { UrlResource video =new UrlResource("file:"+ARCHIVE_DIR_STR+"/"+name+".mp4"); ResourceRegion resourceRegion = resourceRegion(video, httpHeaders); return ResponseEntity.status(HttpStatus.PARTIAL_CONTENT) .contentType(MediaTypeFactory .getMediaType("video/mp4") .orElse(MediaType.APPLICATION_OCTET_STREAM)) .body(resourceRegion); } private ResourceRegion resourceRegion(UrlResource video, HttpHeaders headers) throws IOException { long contentLength = video.contentLength(); HttpRange range = headers.getRange().get(0); if (range != null) { long start = range.getRangeStart(contentLength); long end = range.getRangeEnd(contentLength); long rangeLength = Math.min(1 * 1024 * 1024, end - start + 1); return new ResourceRegion(video, start, rangeLength); } else { long rangeLength = Math.min(1 * 1024 * 1024, contentLength); return new ResourceRegion(video, 0, rangeLength); } }
|
现代浏览器普遍都支持了video
的tag,所以只需要在video的tag里面设置source为SpringMVC的流响应接口即可完成通过浏览器源生播放器进行播放,当然要想实现如倍速、快捷键等更多功能也可以通过其他开源播放器项目进行定制。
<html lang="en"> <head> <meta charset="UTF-8"> <title>PlayPage</title> </head> <body> <video autoplay="autoplay" controls> <source src="/play/name" type="video/mp4"> </video> </body> </html>
|