`
zengshaotao
  • 浏览: 791510 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

视频播放

 
阅读更多

方法的请求地址,连同视频参数会被存储在数据库中,前端通过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实现视频网站的视频上传及视频播放功能 #### 一、项目背景与目标 本文档旨在介绍如何使用Java开发一套完整的视频网站解决方案,重点在于视频上传、视频转码、视频关键帧抽图以及视频播放功能。通过这些...

    .net 视频播放插件

    总的来说,.NET视频播放插件是构建Web视频服务的关键组件,通过理解其工作原理和选择合适的播放器,我们可以为用户提供流畅、个性化的视频观看体验。对于SWF和FLV格式的支持,更是拓宽了内容来源,满足了多样化的...

    获取视频播放时长

    总的来说,获取视频播放时长涉及到多媒体处理和时间戳计算。Xuggler库提供了一种简洁而强大的方式来完成这项任务,使得Java开发者可以轻松地处理视频文件的元数据和内容。在实际应用中,可能还需要考虑其他因素,...

    在线视频播放

    在线视频播放技术是现代互联网应用中的重要组成部分,它使得用户无需下载整个视频文件即可观看视频内容。这种技术的实现依赖于一系列复杂的系统架构和优化策略,涵盖了编码、传输、解码以及用户界面等多个方面。以下...

    微信小程序、在线视频播放

    在微信小程序中实现在线视频播放功能,是许多开发者和企业的需求,它可以让用户无需下载安装应用即可享受流畅的视频观看服务。下面将详细阐述如何在微信小程序中构建一个在线视频播放的功能。 首先,我们需要了解...

    Android在线视频播放之边缓存边播放

    在Android平台上,实现在线视频播放是一项常见的需求,尤其在移动设备上,用户希望可以边缓存边播放视频,以提供流畅的观看体验。本篇文章将深入探讨如何在Android中实现这种功能,主要围绕"Android在线视频播放之边...

    视频播放网站源码

    【视频播放网站源码】是一种用于在线视频服务的软件开发基础,它允许用户在网页上观看视频内容。在这个特定的案例中,源码是基于微软的Silverlight技术构建的,这是一种已经过时但曾经非常流行的富互联网应用程序...

    网页视频播放插件

    网页视频播放插件是网页开发中的一个重要组成部分,它使得用户能够在网页上流畅地观看视频内容,无需离开页面或打开新的应用程序。在这个特定的插件中,我们看到它基于jQuery库来实现,jQuery是一个广泛使用的...

    jsp实现视频播放

    "jsp实现视频播放"这个主题聚焦于如何利用JSP技术来搭建一个在线视频播放平台。在此过程中,我们将讨论以下几个关键知识点: 1. **MIME类型**:视频文件在传输时需要正确指定MIME类型,如"video/mp4"、"video/ogg...

    jsp视频播放jsp视频播放代码和实现

    "jsp视频播放"是这个话题的核心,它涉及到如何在网页上实现视频的播放功能。下面我们将详细探讨JSP视频播放的原理、实现方式以及可能涉及的相关技术。 1. **视频播放原理**: 视频播放主要依赖于浏览器支持的视频...

    TS流网页视频播放

    标题 "TS流网页视频播放" 涉及到的技术领域是网络视频播放,特别是针对TS(Transport Stream)格式的视频流在网页环境中的播放。TS流是一种常见的数字电视传输格式,广泛应用于广播、IPTV等领域。在网页上实现TS流的...

    discuz论坛插件DZ插件 【烟雨】视频播放转换 至尊版v2.0.3

    【烟雨】视频播放转换插件是针对Discuz! 论坛系统开发的一款高级插件,主要用于提升论坛的媒体资源管理能力,特别是对于视频内容的处理。Discuz! 是一个非常流行的开源社区论坛软件,它提供了丰富的功能和高度的可...

    仿微信小视频观看

    设置VideoView的OnCompletionListener来监听视频播放结束,以便进行后续操作。 6. **数据管理**:视频信息可能存储在本地数据库(如SQLite)或网络服务器上。开发者需要了解如何通过Adapter将这些数据绑定到...

    在线视频播放网站

    在线视频播放网站是一种基于Web技术实现的平台,它允许用户无需下载视频文件即可在浏览器上观看视频内容。这种服务依赖于HTML5等现代Web技术,尤其是其媒体元素,如`&lt;video&gt;`标签,来实现流畅的视频播放体验。HTML5...

    基于苹果CMS系统的双端视频播放APP源码+视频教程.zip

    这款双端视频播放APP源码是基于苹果CMS系统构建的,旨在为用户在移动设备上提供流畅的视频观看体验。该APP支持多种视频格式,包括mp4、flv、m3u8、rmvb和mkv,涵盖了当前网络上广泛使用的视频编码标准。 1. **苹果...

    iVideo倔强的移动端视频播放插件目前仅支持移动端点播

    iVideo是一款专为移动端设计的视频播放插件,它的出现主要解决了移动设备上视频播放的特定需求。在本文中,我们将深入探讨iVideo的核心特点、功能、开发背景以及如何使用它来实现高效的移动端点播服务。 一、iVideo...

    前端开发-js-视频播放时长实时记录

    自己写的一个用于记录视频播放时长的js,通过video标签的事件处理实现,文末有使用示例,引入即用。

    大华视频播放插件及demo

    1. **大华视频播放插件**:这是专为大华硬盘录像机(DVR/NVR)设计的Web端播放工具,旨在确保用户能够在浏览器中直接观看来自大华设备的实时视频流。该插件通常包含解码、传输优化以及与硬件设备交互的接口,能够...

Global site tag (gtag.js) - Google Analytics