以springMVC為例獲取上傳視頻文件時長


畢設項目是一個在線學習系統,教師用戶有上傳視頻的功能,在答辯之前趕了一個demo出來,好多功能都寫死了,比如課程學習進度就是被我寫死在前端的一個變量,最近導師要我把項目打包發給他,這才心慌慌趕緊把這些功能補上。不知道正規的學習網站怎么做的學習進度,根據我的理解就是用戶已經觀看的視頻時長除以整個課程的時長,這里就涉及到獲取視頻的時長問題了。

除了在maven中添加文件上傳所需的依賴外,獲取視頻時長還依賴一個jave(注意啊,不是java,我最開始就是看成了java,一臉懵逼)的jar包,這個包在maven倉庫找不到!!!然后只能手動添加了,可以先將jar包下載下來http://download.csdn.net/detail/xiaofei_9070/9650294,由於maven提供了scope為system的依賴,所以這樣可就以添加dependency而不需要再將jar包安裝到本地庫中了。我們為了方便起見,將jar包放到src/main/resources/lib/這個目錄下,然后在依賴中寫下

<dependency>  
            <groupId>jack.jave</groupId>  
            <artifactId>jave</artifactId>  
            <version>1.0.2</version>  
            <scope>system</scope>  
            <systemPath>${basedir}/src/main/resources/lib/jave-1.0.2.jar</systemPath>  
 </dependency>

我之前在網上看到的一段代碼是這樣的

MultipartFile file = null;
CommonsMultipartFile cf= (CommonsMultipartFile)file; 
   DiskFileItem fi = (DiskFileItem)cf.getFileItem(); 
   File f2 = fi.getStoreLocation();
Encoder encoder = new Encoder(); 
       try { 
         MultimediaInfo m = encoder.getInfo(f2); 
         long ls = m.getDuration(); 
         System.out.println(ls/1000);
       } catch (Exception e) { 
           logger.error("get ivr duration error");
       }

我試了一下

CommonsMultipartFile cf= (CommonsMultipartFile)file; 這句代碼一直報類型無法轉換的錯,於是乎我就直接將視頻文件保存,再去獲取時長,下面這段代碼包含了上傳文件的功能
     int minute = 0;                 //視頻時長
        String newFileNameVideo = "";//新視頻文件名字
        if(videoFile!=null) {
            //上傳文件名
             String originFileNameVideo = videoFile.getOriginalFilename();
             //新文件名
             newFileNameVideo = UUID.randomUUID()+originFileNameVideo.substring(originFileNameVideo.lastIndexOf("."));
             //新文件地址
             String videoFileUrl = request.getSession().getServletContext().getRealPath("videoUpload/")+newFileNameVideo;
             //新文件
             File newVideoFile = new File(videoFileUrl );
             //上傳新文件
             videoFile.transferTo(newVideoFile);  
             //獲取視頻文件時長
              Encoder encoder = new Encoder(); 
               try { 
                 MultimediaInfo m = encoder.getInfo(newVideoFile); 
                 minute = (int) (m.getDuration()/60); //獲取視頻時長
                 if(minute<1)
                     minute = 1;
               } catch (Exception e) { 
                   System.out.println("出現錯誤");;
               }            
        }    

以上代碼只包含了上傳視頻和獲取時長的功能,沒有把全套的前端獲取文件然后傳給controller的代碼貼上來是因為我前端代碼寫的太爛了。。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM