java视频ios无法播放_java处理苹果浏览器safari无法播放视频流(Accept-Ranges)

private void sendVideo(HttpServletRequest request, HttpServletResponse response, File file, String fileName) throwsFileNotFoundException, IOException {

RandomAccessFile randomFile= new RandomAccessFile(file, "r");//只读模式

long contentLength =randomFile.length();

String range= request.getHeader("Range");int start = 0, end = 0;if(range != null && range.startsWith("bytes=")){

String[] values= range.split("=")[1].split("-");

start= Integer.parseInt(values[0]);if(values.length > 1){

end= Integer.parseInt(values[1]);

}

}int requestSize = 0;if(end != 0 && end >start){

requestSize= end - start + 1;

}else{

requestSize=Integer.MAX_VALUE;

}byte[] buffer = new byte[4096];

response.setContentType("video/mp4");

response.setHeader("Accept-Ranges", "bytes");

response.setHeader("ETag", fileName);

response.setHeader("Last-Modified", newDate().toString());//第一次请求只返回content length来让客户端请求多次实际数据

if(range == null){

response.setHeader("Content-length", contentLength + "");

}else{//以后的多次以断点续传的方式来返回视频数据

response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT);//206

long requestStart = 0, requestEnd = 0;

String[] ranges= range.split("=");if(ranges.length > 1){

String[] rangeDatas= ranges[1].split("-");

requestStart= Integer.parseInt(rangeDatas[0]);if(rangeDatas.length > 1){

requestEnd= Integer.parseInt(rangeDatas[1]);

}

}long length = 0;if(requestEnd > 0){

length= requestEnd - requestStart + 1;

response.setHeader("Content-length", "" +length);

response.setHeader("Content-Range", "bytes " + requestStart + "-" + requestEnd + "/" +contentLength);

}else{

length= contentLength -requestStart;

response.setHeader("Content-length", "" +length);

response.setHeader("Content-Range", "bytes "+ requestStart + "-" + (contentLength - 1) + "/" +contentLength);

}

}

ServletOutputStream out=response.getOutputStream();int needSize =requestSize;

randomFile.seek(start);while(needSize > 0){int len =randomFile.read(buffer);if(needSize

out.write(buffer,0, needSize);

}else{

out.write(buffer,0, len);if(len

}

}

needSize-=buffer.length;

}

randomFile.close();

out.close();

}


版权声明:本文为weixin_30411455原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。