技术类文章

在线视频播放

2017-12-27  本文已影响0人  吝啬言语

最近项目中用到了在线播放视频的功能,总结一下。
基本思路是,服务端取出文件字节流,输出到前端, 网页用video标签播放。
1、前端video标签,src指定请求的url和文件名:

<video style="width: 800px;height: 600px;" controls preload>
     <source src="url?vpath=文件服务端路径"></source>
</video>

2、服务端响应请求,用servlet或其他都可以。

public void previewLocal(HttpServletRequest request, HttpServletResponse response) throws IOException {
        // 得到文件路径,取文件
        String filePath = "D:\\VID.mp4";
        // String filePath = request.getParameter("vpath");
        File file = new File(filePath);
        if (file.exists()) {
            String diskfilename = file.getName();
            // 取头参数,浏览器信息等,如果需要的话
            String range = request.getHeader("range");
            String browser = request.getHeader("User-Agent");
            logger.info("range:" + range + ",browser:" + browser);
            // 设置响应头信息
            response.setContentType("video/mp4");
            response.setHeader("Content-Disposition", "attachment; filename=\"" + diskfilename + "\"");
            response.setContentLength((int) file.length());
            // 前边的range是请求的数据范围,一般"0-",表示从0开始,之后的所有内容
            // Content-Range是返回的数据范围,需要快进的话,需要指定有效的范围,不指定不能快进,超出范围也不能快进
            response.setHeader("Content-Range", range + (file.length() - 1));
            response.setHeader("Accept-Ranges", "bytes");
            // 裤子脱完了,开始蹲下干正事,完了记得擦破屁股
            InputStream is = new FileInputStream(file);
            OutputStream os = response.getOutputStream();
            IOUtils.copyBytes(is, os, file.length(), false);
            // 擦屁股
            is.close();
            os.close();
        }
    }

3、现在的项目好多都赶时髦,弄个HDFS存文件,这样的话,只需要稍加修改。( 前提是HDFS存取文件各种操作都搞定了)

//检查文件存在
if(fs.exits( filePath )){}
//取文件长度:
len = fs.getFileStatus(filePath).getLen();
//得到输入流:
InputStream inputStream = fs.open( filePath );

4、基本功能实现了,完善工作肯定还是有的,遇到问题解决问题吧。

上一篇下一篇

猜你喜欢

热点阅读