其他分享
首页 > 其他分享> > 分段视频流

分段视频流

作者:互联网

response.reset();
File file = new File(filePath + name);
if(file.exists()){
    long fileLength = file.length();
    // 随机读文件
    RandomAccessFile randomAccessFile = new RandomAccessFile(file, "r");
    //获取从那个字节开始读取文件

    String rangeString = request.getHeader("Range");
    long range=0;
    if (rangeString!=null) {
        range = Long.valueOf(rangeString.substring(rangeString.indexOf("=") + 1, rangeString.indexOf("-")));
    }

    //获取响应的输出流
    OutputStream outputStream = response.getOutputStream();
    //设置内容类型
    response.setHeader("Content-Type", "video/mp4");
    //返回码需要为206,代表只处理了部分请求,响应了部分数据
    response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT);
    // 移动访问指针到指定位置
    randomAccessFile.seek(range);
    // 每次请求只返回1MB的视频流
    byte[] bytes = new byte[1024 * 1024];
    int len = randomAccessFile.read(bytes);
    //设置此次相应返回的数据长度
    response.setContentLength(len);
    //设置此次相应返回的数据范围
    response.setHeader("Content-Range", "bytes "+range+"-"+(fileLength-1)+"/"+fileLength);
    // 将这1MB的视频流响应给客户端
    outputStream.write(bytes, 0, len);
    outputStream.close();
    randomAccessFile.close();
    System.out.println("返回数据区间:【"+range+"-"+(range+len)+"】");
}

标签:rangeString,分段,视频流,bytes,randomAccessFile,range,file,response
来源: https://www.cnblogs.com/ssix/p/16595197.html