方法的请求地址,连同视频参数会被存储在数据库中,前端通过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();
}
相关推荐
在线视频播放系统是一种基于Web...总之,在线视频播放系统是一个集成了多种技术的复杂工程,它涉及前端界面设计、后端服务开发、数据库管理、网络流媒体技术等多个方面,旨在为用户提供便捷、高效的在线视频观看体验。
### Java实现视频网站的视频上传及视频播放功能 #### 一、项目背景与目标 本文档旨在介绍如何使用Java开发一套完整的视频网站解决方案,重点在于视频上传、视频转码、视频关键帧抽图以及视频播放功能。通过这些...
总的来说,.NET视频播放插件是构建Web视频服务的关键组件,通过理解其工作原理和选择合适的播放器,我们可以为用户提供流畅、个性化的视频观看体验。对于SWF和FLV格式的支持,更是拓宽了内容来源,满足了多样化的...
总的来说,获取视频播放时长涉及到多媒体处理和时间戳计算。Xuggler库提供了一种简洁而强大的方式来完成这项任务,使得Java开发者可以轻松地处理视频文件的元数据和内容。在实际应用中,可能还需要考虑其他因素,...
在线视频播放技术是现代互联网应用中的重要组成部分,它使得用户无需下载整个视频文件即可观看视频内容。这种技术的实现依赖于一系列复杂的系统架构和优化策略,涵盖了编码、传输、解码以及用户界面等多个方面。以下...
在微信小程序中实现在线视频播放功能,是许多开发者和企业的需求,它可以让用户无需下载安装应用即可享受流畅的视频观看服务。下面将详细阐述如何在微信小程序中构建一个在线视频播放的功能。 首先,我们需要了解...
在Android平台上,实现在线视频播放是一项常见的需求,尤其在移动设备上,用户希望可以边缓存边播放视频,以提供流畅的观看体验。本篇文章将深入探讨如何在Android中实现这种功能,主要围绕"Android在线视频播放之边...
【视频播放网站源码】是一种用于在线视频服务的软件开发基础,它允许用户在网页上观看视频内容。在这个特定的案例中,源码是基于微软的Silverlight技术构建的,这是一种已经过时但曾经非常流行的富互联网应用程序...
网页视频播放插件是网页开发中的一个重要组成部分,它使得用户能够在网页上流畅地观看视频内容,无需离开页面或打开新的应用程序。在这个特定的插件中,我们看到它基于jQuery库来实现,jQuery是一个广泛使用的...
"jsp实现视频播放"这个主题聚焦于如何利用JSP技术来搭建一个在线视频播放平台。在此过程中,我们将讨论以下几个关键知识点: 1. **MIME类型**:视频文件在传输时需要正确指定MIME类型,如"video/mp4"、"video/ogg...
"jsp视频播放"是这个话题的核心,它涉及到如何在网页上实现视频的播放功能。下面我们将详细探讨JSP视频播放的原理、实现方式以及可能涉及的相关技术。 1. **视频播放原理**: 视频播放主要依赖于浏览器支持的视频...
标题 "TS流网页视频播放" 涉及到的技术领域是网络视频播放,特别是针对TS(Transport Stream)格式的视频流在网页环境中的播放。TS流是一种常见的数字电视传输格式,广泛应用于广播、IPTV等领域。在网页上实现TS流的...
【烟雨】视频播放转换插件是针对Discuz! 论坛系统开发的一款高级插件,主要用于提升论坛的媒体资源管理能力,特别是对于视频内容的处理。Discuz! 是一个非常流行的开源社区论坛软件,它提供了丰富的功能和高度的可...
设置VideoView的OnCompletionListener来监听视频播放结束,以便进行后续操作。 6. **数据管理**:视频信息可能存储在本地数据库(如SQLite)或网络服务器上。开发者需要了解如何通过Adapter将这些数据绑定到...
在线视频播放网站是一种基于Web技术实现的平台,它允许用户无需下载视频文件即可在浏览器上观看视频内容。这种服务依赖于HTML5等现代Web技术,尤其是其媒体元素,如`<video>`标签,来实现流畅的视频播放体验。HTML5...
这款双端视频播放APP源码是基于苹果CMS系统构建的,旨在为用户在移动设备上提供流畅的视频观看体验。该APP支持多种视频格式,包括mp4、flv、m3u8、rmvb和mkv,涵盖了当前网络上广泛使用的视频编码标准。 1. **苹果...
iVideo是一款专为移动端设计的视频播放插件,它的出现主要解决了移动设备上视频播放的特定需求。在本文中,我们将深入探讨iVideo的核心特点、功能、开发背景以及如何使用它来实现高效的移动端点播服务。 一、iVideo...
自己写的一个用于记录视频播放时长的js,通过video标签的事件处理实现,文末有使用示例,引入即用。
1. **大华视频播放插件**:这是专为大华硬盘录像机(DVR/NVR)设计的Web端播放工具,旨在确保用户能够在浏览器中直接观看来自大华设备的实时视频流。该插件通常包含解码、传输优化以及与硬件设备交互的接口,能够...