• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于JSP的流媒體播放的設(shè)計與實現(xiàn)

      2016-11-02 23:11楊子祥林鵬
      電腦知識與技術(shù) 2016年18期
      關(guān)鍵詞:流媒體

      楊子祥 林鵬

      摘要:隨著Internet的發(fā)展,網(wǎng)頁視頻播放的使用越來越多。但是,目前如果直接通過HTML5的

      3 基于JSP的在線流媒體播放的實現(xiàn)

      在第二節(jié)中,本文通過Chrome的Http包的追蹤功能,截取了視頻在播放控制過程中不同播放位置請求的包。通過圖2、圖3和圖4的追蹤結(jié)果可以看到他們的Request Headers以及Response Headers中的部分頭文件字段是不同的,具體的信息比較如表1所示。

      由表1中可以看到,三個圖中的Http包中只有Range、Content-Range字段是不同的,其他的字段的內(nèi)容根本就沒有發(fā)生變化。其中,Range是Request Headers中的字段,Content-Range是Response Headers中的字段。在表1中還可以發(fā)現(xiàn),Content-Range字段的內(nèi)容和Range字段的內(nèi)容有一定的關(guān)系;Content-Range內(nèi)容中“-”前的數(shù)值和Range是一致的。同時,在表1中也可以發(fā)現(xiàn),Content-Range字段和Content-Length字段有一定的關(guān)系;Content-Range內(nèi)容中“/”后的數(shù)值和Content-Length是一致的。我們知道,Http包中的Content-Length的作用主要是記錄文件的長度,因此可以在服務(wù)器端通過程序求出文件的大小。

      由于Http包中的Request Headers是由瀏覽器進行發(fā)出并封裝的,因此本文的程序無法控制包中的Request Headers內(nèi)容。但是,Http包中的Response Headers是由服務(wù)器封裝后返回給瀏覽器的;因此,本文的程序設(shè)計將會根據(jù)Http包中的Request Headers字段內(nèi)容,對Http包中的Response Headers字段進行封裝返回給服務(wù)器。根據(jù)以上的分析,本文通過JSP進行程序設(shè)計如下:

      @RequestMapping(value = { "/videos/{path}" })

      public String displayVideo(HttpServletRequest request,

      HttpServletResponse response, @PathVariable String path) {

      try {String filePath = videoDir + path + ".mp4";

      File file = new File(filePath);

      if (!file.exists()) {

      response.sendError(404);

      LOG.error("未找到文件" + file.getCanonicalPath());}

      Long fileLength = file.length();

      LOG.debug("文件找到了,大小為" + fileLength);

      String range = request.getHeader("range");

      if (range != null && !range.equals("")) {

      LOG.debug("請求的名字是range,內(nèi)容是" + range); }

      Long startPos = 0l;

      if (range != null && !range.equals("")) {

      Pattern pattern = Pattern

      .compile("^bytes\\=(\\d+)(?:\\-(\\d+)?)?$");

      Matcher matcher = pattern.matcher(range);

      LOG.debug(matcher.matches());

      startPos = Long.parseLong(matcher.group(1), 10);

      LOG.debug("成功截獲range,開始位置是" + startPos);

      response.setStatus(206);

      } else {

      response.setStatus(200);

      LOG.debug("從頭開始傳送");}

      InputStream is = new FileInputStream(file);

      OutputStream os = response.getOutputStream();

      byte[] buffer = new byte[1024];

      response.addHeader("Content-Range", "bytes " + startPos + "-"

      + (fileLength - 1) + "/" + fileLength);

      response.addHeader("Content-Length", fileLength.toString());

      response.setCharacterEncoding("UTF-8");

      response.setContentType("video/mp4");

      response.setHeader("Accept-Ranges", "bytes");

      is.skip(startPos);

      int length = is.read(buffer);

      while (length > 0) {

      os.write(buffer, 0, length);

      length = is.read(buffer); }

      os.flush();

      os.close();

      is.close();

      } catch (Exception err) {

      if (err.getClass()

      .getName()

      .equals("org.apache.catalina.connector.ClientAbortException")) {

      LOG.debug("客戶掛斷了");

      } else {

      err.printStackTrace();}}

      return null; }

      在本文的程序設(shè)計中,瀏覽器的視頻請求URL路徑的后端是通過JSP中的Spring框架進行控制,在路徑中的/videos/{paths}即是視頻路徑存儲在磁盤的相對位置;在程序中,視頻的讀取并沒有經(jīng)過中間的流媒體服務(wù)器,而是直接讀取在磁盤中的視頻文件。經(jīng)過程序發(fā)布在Tomcat7上測試之后,視頻在播放的過程中,用戶可以根據(jù)需求隨意拖拽,解決了Html5中

      4 結(jié)論

      本文通過分析Windows Media Services流媒體服務(wù)器中視頻拖拽播放控制過程中,Chrome瀏覽器發(fā)送的Http包的信息,得出了瀏覽器播放視頻時播放控制和Http包中Request Headers、Response Headers頭文件的關(guān)系。并且,本文通過JSP程序語言的設(shè)計,成功實現(xiàn)了流媒體服務(wù)器控制視頻播放的原理。本文設(shè)計的程序發(fā)布到Tomcat后,經(jīng)過該程序訪問的視頻都可以在瀏覽器端隨意拖拽播放視頻,解決了Html5的

      參考文獻:

      [1] 蔣太杰. Windows Media Services及其在遠程教育中的應(yīng)用[J]. 指揮技術(shù)學(xué)院學(xué)報, 2001, 12(6): 81-85.

      [2] 王雪婷, 于勇. Windows Media Services流媒體技術(shù)與實現(xiàn)[J]. 信息技術(shù)與信息化, 2006(1): 51-53+64.

      [3] 李學(xué)俊. Windows Media Services及其在遠程教育中的應(yīng)用[J]. 現(xiàn)代遠程教育研究, 2002(3): 27-29.

      [4] 高劍. 利用Windows Media流媒體技術(shù)構(gòu)建網(wǎng)絡(luò)直播系統(tǒng)[J]. 中國高新技術(shù)企業(yè), 2010(30): 62-64.

      猜你喜歡
      流媒體
      基于云服務(wù)的P2P流媒體技術(shù)在遠程教學(xué)視頻傳輸中的應(yīng)用
      濮阳市| 商丘市| 凯里市| 定兴县| 山西省| 福鼎市| 化州市| 佛山市| 宝清县| 宁明县| 时尚| 宣城市| 内黄县| 海原县| 东山县| 海盐县| 蓬莱市| 油尖旺区| 汾阳市| 河西区| 普陀区| 长沙县| 合作市| 扬州市| 綦江县| 会理县| 合水县| 如东县| 黄平县| 苗栗市| 津市市| 定远县| 阳朔县| 深泽县| 怀仁县| 南岸区| 同心县| 拉孜县| 兖州市| 新巴尔虎左旗| 沈阳市|