1. 程式人生 > >基於video.js 的線上播放功能

基於video.js 的線上播放功能

  因為在此次專案中需要實現線上播放視訊的效果. 所以上網百度了一下相關的外掛, 最後決定選用基於html5的video.js外掛來實現.

video.js也是開源免費的,下載十分方便. 

  1.    下載之後解壓, 主要用到的資原始檔是 video.js , video-js.min.css.在html 或 jsp頁面首先匯入這兩個資原始檔
	<link href="${rc.contextPath}/statics/css/video-js.min.css" rel="stylesheet">
	<script src="${rc.contextPath}/statics/libs/video.min.js"></script>

以下是官網上給出的簡單使用方法, 因為我們只是要求能線上播放就行, 對其他樣式什麼的要求不大,所以

個簡單例子就足夠用了.

<!DOCTYPE HTML>
<html>
<head>
  <title>Video.js Test Suite</title>
<link href="//vjs.zencdn.net/4.10/video-js.css" rel="stylesheet">
<script src="//vjs.zencdn.net/4.10/video.js"></script>
 
</head>
<body>
 <video id="example_video_1" class="video-js vjs-default-skin" controls width="640" height="264">
 <source src="http://video-js.zencoder.com/oceans-clip.mp4" type='video/mp4' />
</video> 
</body> 
</html>


因為是web專案播放的視訊肯定是在伺服器中的,上述例子中主要是根據source的src找到資源的播放

地址,從而進行播放. 

所以首先要找到的就是伺服器上,視訊的相對地址.這點非常容易實現,下面這樣應該就能獲取到的

視訊的path

	 String path = request.getSession().getServletContext().getRealPath("/");       
	 path = path + "resources\\" + "";

然後就是將其轉化為相應的視訊流,寫入到reponse中,返回請求.下面是此方法的完整程式碼

       @RequestMapping("/getVideo")
       public void getVideo(HttpServletRequest request, HttpServletResponse response) {
  
       String transcode = request.getParameter("transcode");
       
       String path = request.getSession().getServletContext().getRealPath("/");
       path = path + "resources\\" + transcode + "\\videos\\1\\";
       
       File file0 = new File(path);
       File[] fielList = file0.listFiles();
       String fileName = null;
       for(int i = 0; i < fielList.length; i++){
    	   fileName = fielList[i].getName();
       }
       path = path + fileName;
  
       File file = new File(path);
  
       InputStream in = null;
       ServletOutputStream out = null;
       try {
           in = new FileInputStream(file);
           out = response.getOutputStream();
           byte[] buffer = new byte[4 * 1024];
           int length;
           while ((length = in.read(buffer)) > 0) {
               out.write(buffer, 0, length);
           }
       } catch (FileNotFoundException e) {
           System.out.println("檔案讀取失敗,檔案不存在");
           e.printStackTrace();
       } catch (IOException e) {
           System.out.println("檔案流輸出異常");
           e.printStackTrace();
       } finally {
           try {
               in.close();
               out.close();
           } catch (IOException e) {
               System.out.println("檔案流關閉異常");
               e.printStackTrace();
           }
       }
   }


最後一步就是設定src的值通過請求呼叫controller中的此方法,從而實現線上播放視訊的效果.因為專案

用的是html頁面,不是jsp頁面所以只能在js中實現請求controller的方法.

一開始的想法本來是直接將src設定為相對應的請求方法, 但是並沒有達到預期效果, 後來將src地址寫死測,試了一下,是可以播放的. 所以方法應該是正確的,

但可能是頁面初始化或其他的原因, 導致並沒有呼叫相應的方法。

	$("#my-player").find("source").attr("src", "/zhzf/videomanage/getVideo?transcode=" + transcode);

接著又試了幾種其他的方法, 也沒能成功實現. 最後直接用jQuery將頁面上對應的那段html程式碼直接在js中賦值,成功實現了效果。

	var modalContent = '<video id="my-player" style="width: 996px; height:600px;" class="video-js" controls preload="auto" poster="" data-setup="{}">'
						+ '<source src="/zhzf/videomanage/getVideo?transcode=' + transcode + '" type="video/mp4">'
						+ '</source><p class="vjs-no-js">To view this video please enable JavaScript, and consider upgrading to a web browser that'
						+ '<a href="#" target="_blank">supports HTML5 video</a></p></video>';
	$('#videoModal').html(modalContent);