private HttpServletResponse iosDownLoad(HttpServletRequest request, HttpServletResponse response, File file, String fileName) throws Exception {
        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", 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;
                }
            }
            needSize -= buffer.length;
        }
        randomFile.close();
        out.close();
        return response;
    }

java解决ios视频无法播放的问题相关推荐

  1. java 上传视频并播放_java实现视频上传和播放..doc

    java实现视频上传和播放. Java实现视频网站的视频上传.视频转码.视频关键帧抽图, 及视频播放功能 视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过F ...

  2. 微信小程序录音+音频播放(解决ios无法音频播放问题)

    微信小程序录音+播放 1.创建全局变量 const audioManager = wx.getRecorderManager(): const innerAudioContext = wx.creat ...

  3. ios视频循环播放实现

    /*** 添加播放器通知,通过AVPlayerItemDidPlayToEndTimeNotification字段判断播放器播放情况*/ -(void)addNotification{//给AVPla ...

  4. 解决网页视频无法播放问题 (搜狐)

    原因:没有播放插件 插件下载:百度adobeflash player 找到适和linux的版本 eg: install_flash_player_11_linux.x86_64.tar.gz 解压: ...

  5. 使用wxParse解析富文本的总结以及解决苹果手机上视频无法播放的方法

    先上官方文档:https://github.com/icindy/wxParse.先讲一下我的理解,最后说明下自己使用wxParse的业务场景以及遇到的问题. 1.先上个目录结构. 然后总结下wxPa ...

  6. 爱奇艺html5不能播放器,爱奇艺视频播放失败怎么办 网页视频不能播放的解决方法教程[多图]...

    有网友反映在爱奇艺网站看视频时总是提示播放失败,不能正常播放视频,这该怎么办呢?本文将给大家介绍解决爱奇艺视频播放失败的方法. 解决方法: 1.电脑缓存过多 解决方法:点击"设置" ...

  7. iPhone下mp4视频无法播放和部分手机只有声音没有画面

    概述 mp4视频在部分手机上加载失败.无法播放或有声音没画面的原因是:视频编码或声道数有问题,解决方案:视频转码. 遇到的问题 mp4视频在 iPhone XR (IOS 14.1) 上无法播放,一直 ...

  8. 微信播放在服务器视频无法播放音乐,【bug解决】ios微信浏览器中背景音乐无法播放...

    我记得之前在一次项目中,出现过浏览报错: 所以在这次H5的制作中,我使用了iframe来加载音频文件,使用这种方式后,电脑端是没有问题的,但是当上传至服务器上在手机上浏览时,会出现点击音乐旋转按钮无法 ...

  9. Springboot+Minio通过分片下载解决IOS下H5无法播放视频问题

    一.环境说明 JDK 1.8 Springboot 2.7.5 Minio 8.4.5 Vue3实现的微信公众号网页 二.问题描述 当前项目是基于springboot和vue3的前后端分离架构,前端目 ...

最新文章

  1. AI 女神李飞飞最新文章:发展人工智能应该以人为本
  2. 计算机论文数据建模怎么写,如何撰写建模论文?
  3. 【STBC】Alamouti,STBC误码率仿真
  4. 我的NHibernate之路(1)---基本配置篇
  5. python如何离线安装第三方模块_扣丁学堂python开发之第三方模块pip离线安装
  6. HALCON示例程序class_2dim_unsup.hdev基于二维直方图的聚类分类
  7. linux夏令时配置文件,Linux夏令时是怎么调整的?
  8. POLYCOM RMX2000 激活与初始化 信令板卡初始化
  9. WCF发布到IIS 7.0,并以https访问
  10. Servlet开发(1)-----基础及MVC设计模式
  11. springboot基于web的游泳馆信息管理系统毕业设计源码281444
  12. excel如何冻结表格行或者列
  13. android:persistent属性研究
  14. 安装pywifi的坑
  15. 18.网络技术——BGP的原理+实验题(后附练习题)
  16. 视频伪原创片头片尾 视频合并会改变md5
  17. 陶伟死因 从微博看明星
  18. 软件开发人员的作战手册 - 让程序员活的久一点
  19. 批量爬取豆瓣短评并批量生成词云
  20. Flutter查看库的依赖关系

热门文章

  1. IEO, 玩不过一个月!
  2. noxim 安装 与 使用教程
  3. 如何专心睡眠:当我们的思维停不下来的时候
  4. quartz定时任务启动报错
  5. java计算机毕业设计WEB儿童运动馆业务信息系统MyBatis+系统+LW文档+源码+调试部署
  6. 局域网流量监控原理(java)
  7. 这篇文章教会你怎么PDF转HTML格式
  8. 计量经济学 第四版 庞皓 课后答案
  9. 基于springboot音乐网站与分享平台
  10. 推荐几款好用的数据库管理工具