<video> plays in other browsers, but not Safari

后端 未结 11 1533
清酒与你
清酒与你 2020-12-06 04:30

We have an MP4 video on our site; it plays fine in IE9+, Firefox, Chrome, and Chrome on mac. However, on Safari, the video doesn\'t play at all - it does trigger a \"stalled

11条回答
  •  渐次进展
    2020-12-06 04:34

    Safari and iPhone require the "Range" request header to play your media content. you have to handle Range on the server-side.

            if (request.getHeader("Range") != null) {
                System.out.println("Inside range ");
    
    
                System.out.println("range value "+request.getHeader("range"));
            //  String fileLocation = melpUploadFiles.getFilethumbPath();
                resfilename=melpUploadFiles.getFilename();
    
                response.setStatus(206);
                String rangeValue = request.getHeader("range").trim().substring("bytes=".length());
    
    
                File fileloc= new File(melpUploadFiles.getFilePath());
                 long fileLength = fileloc.length();
                long start, end;
                if (rangeValue.startsWith("-")) {
                    end = fileLength - 1;
                    start = fileLength - 1 - Long.parseLong(rangeValue.substring("-".length()));
                } else {
                    String[] range = rangeValue.split("-");
                    start = Long.parseLong(range[0]);
                    end = range.length > 1 ? Long.parseLong(range[1]) : fileLength - 1;
                }
                if (end > fileLength - 1) {
                    end = fileLength - 1;
                }
                if (start <= end) {
    
                 System.out.println("inside  response block");
    
                    long contentLength = end - start + 1;
                    response.setHeader("Content-Length", contentLength + "");
                    response.setHeader("Content-Range", "bytes " + start + "-" + end + "/" + fileLength);
                    response.setHeader("Content-Type", "video/mp4");
                    response.setHeader("Accept-Ranges","bytes");
                    response.setHeader("ETag","\"a226e70476837efa4df4b4bfd75366c4\"");
                    response.setHeader("Server", "Apache");
                    response.setHeader("Last-Modified",System.currentTimeMillis()+"");
                    response.setDateHeader("Expires", System.currentTimeMillis() + 604800000L);
    
    
                //  response.setHeader("Content-Disposition", "inline; filename="+resfilename+"");
                    RandomAccessFile raf = new RandomAccessFile(fileloc, "r");
                    raf.seek(start);
                    output = response.getOutputStream();
                    byte[] buffer = new byte[2096];
                    int bytesRead = 0;
                    long totalRead = 0;
    
                    System.out.println("content length "+contentLength);
    
                    while(totalRead

    else { for other browser }

提交回复
热议问题