代码之家  ›  专栏  ›  技术社区  ›  Laxmi Prajapati

视频获取不完全,

  •  0
  • Laxmi Prajapati  · 技术社区  · 8 年前

    我想从mongodb获取视频,但它应该播放视频大小,但它只播放几秒钟,我给出的maxUploadSize是20mb,maxInMemorySize也是20mb,但在jsp页面上,它只能获取1mb视频,甚至视频大小超过1mb。 我不知道该怎么做,视频应该根据视频大小完全播放

    这是控制器

    @RequestMapping(value = "/welcome-video-controller/{videoObj}", produces = "video/webm")
    @ResponseBody
    public ResponseEntity<byte[]> getVideoForLoginPage(@PathVariable String videoObj, HttpServletResponse response)
            throws IOException {
    
        LOG.info("Entry :: getVideoForPost");
        BufferedImage bufferedVideoForPost = null;
        URL resourcePath = null;
        byte[] videoArray = null;
        ResponseEntity<byte[]> result = null;
        LOG.info("videoObj-->" + videoObj);
        File videoFromMongo = new File(VIDEO_FROM_PATH + videoObj);
        GridFSDBFile videoFile = MongoUtility.getVideoFileFromMongo(videoObj);
        videoFile.writeTo(videoFromMongo);
        bufferedVideoForPost = ImageIO.read(videoFromMongo);
        videoFile.getInputStream();
        HttpHeaders headers = new HttpHeaders();
        headers.setContentLength((int) videoFile.getLength());
        videoArray = new byte[(int) videoFile.getLength()];
        result = new ResponseEntity<byte[]>(videoArray, headers, HttpStatus.OK);
        videoFile.getInputStream().read(videoArray);
        LOG.info("videoArray-->" + videoArray);
        LOG.info("videoArray size-->" + videoArray.length);
        return result;
    }
    

    这是html编码

    <c:set value="${videoPostDetail.videoNames}" var="videoObj" />
    <c:if test="${videoObj ne ''}">
        <video width="96%" height="220" controls id="sideVideo">
              <source src='/SocialNetworkingApp/welcome-video-controller/${videoObj}.do' type='video/webm'>
    
        </video>
    </c:if>
    

    它应该播放完整的视频,我试了很多次,但都没有效果,请告诉我是什么问题,

    1 回复  |  直到 8 年前
        1
  •  -1
  •   Laxmi Prajapati    8 年前

    我得到了解决方案,实际上问题是块大小,我无法设置文件的块大小,默认情况下,块大小小于1 mb, 现在,我将这一行添加到代码gfsFile中。setChunkSize(uploadVideoFile.length());而且工作正常。

        public static void saveVideoIntoMongo(File uploadVideoFile, String videoFilePath, String newVideoFileName)
            throws IOException {
    
        LOG.info("Entry :: saveVideoIntoMongo");
        LOG.info("videoFilePath-->" + videoFilePath);
        LOG.info("newVideoFileName-->" + newVideoFileName);
        LOG.info("uploadVideoFile-->" + uploadVideoFile);
    
        DB db = getMongoDBInstance("videoDb");// later on take it from the properties file instead of hardcoding
        GridFS gfsPhoto = getGridFSForFiles(db, "video");
    
        if (!("").equals(newVideoFileName)) {
            GridFSInputFile gfsFile = gfsPhoto.createFile(uploadVideoFile);
            gfsFile.setChunkSize(uploadVideoFile.length());//setting chunkSize
            gfsFile.setFilename(newVideoFileName);
            gfsFile.save();
    
        }
    
        LOG.info("Exit :: saveVideoIntoMongo");
    }