方法的请求地址,连同视频参数会被存储在数据库中,前端通过html5标签,读取该url。方法是具体的内容:
public void videoPlayMP4(String videoId,HttpServletRequest request, HttpServletResponse response) throws FileNotFoundException, IOException {
String file = urlConfig.getLocalDir()+videoId+".mp4";
File file2 = new File(file);
if (!file2.exists()||file2.length()==0) {
VideoParamDTO videoParamDTO=videoMapper.selectVideo(videoId);
VideoLocalUtil.save(videoParamDTO.getVideoURL(),file);
}
RandomAccessFile randomFile = new RandomAccessFile(new File(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[1024*256];
response.setContentType("video/mp4");
response.setHeader("Accept-Ranges", "bytes");
response.setHeader("ETag", videoId);
response.setHeader("Last-Modified", new Date().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 < buffer.length){
out.write(buffer, 0, needSize);
} else {
out.write(buffer, 0, len);
if(len < buffer.length){
break;
}
}
out.flush();
needSize -= buffer.length;
}
randomFile.close();
out.close();
}
相关推荐
Java实现视频网站的视频上传及视频播放功能
在线视频播放网站源码是一款html5模板,适合搞笑娱乐类视频播放网站模板。
在线视频播放
自己写的一个用于记录视频播放时长的js,通过video标签的事件处理实现,文末有使用示例,引入即用。
最近在研究Unity视频播放。虽然可以实现简单的视频播放功能,但是对于商业化或者移动端的项目来说远远不够(比如:当文件较大时,会出现明显的卡顿)。 网上找了好多资料,试了好多插件,综合比较下来,AVPro Video...
通过java,获取一个视频资源的播放时长!
一个自制基于jsp+servlet的在线视频播放系统,运用了很多js特效和最新的html5等。包括需求分析文档和详细设计文档。
编程环境:vs2010,opencv2.4.9 编程语言 C++ 功能 视频播放
winform中视频播放的一系列无边框 ,移动等效果
基于最新微软silverlight技术的视频播放网站源码
视频播放+列表,html页面。
jsp视频播放代码和实现,真正的实现了jsp视频的播放功能
软件名称:局域网视频播放控制 版本号:V3.3 (2019.04) 软件功能: 软件可接收Socket TCP和UDP指令,通过指令控制播放器播放视频等操作,如:播放,暂停,音量加减,视频切换,图片切换,上一张,下一张,自动播放...
H5(html5 video)视频播放禁止拖动进度条,不能快进,不能后退;微信公众号视频播放,视频播放后才能操作其他内容。 内含Java视频流播放,本人并不建议直接将视频路径放到src中,而是使用视频流方式获取
istview列表视频播放 支持全屏 高仿网易头条视频播放
VideoListDemo 一个视频播放列表demo,视频播放使用的ijkplayer,正在播放视频拖动到不可见区域小窗口播放,可全屏切换
html视频播放功能。
jsp实现视频播放jsp实现视频播放jsp实现视频播放jsp实现视频播放jsp实现视频播放jsp实现视频播放jsp实现视频播放jsp实现视频播放
labview视频播放的正确方法.vi
iOS视频图片混合轮播,支持视频播放和图片预览