天天看點

自己開發的線上視訊下載下傳工具,基于Java多線程

比如這個線上視訊:

自己開發的線上視訊下載下傳工具,基于Java多線程

我們可以正常播放,但是找不到下載下傳按鈕。

打開Chrome開發者工具,在Network标簽頁裡能看到很多網絡傳輸請求:

自己開發的線上視訊下載下傳工具,基于Java多線程

随便看一個請求的響應,發現類型為video,大小為500多k。是以,這個線上視訊被拆分成了若幹500多k的小片段,然後通過浏覽器下載下傳到本地進行播放。

自己開發的線上視訊下載下傳工具,基于Java多線程

這個片段的url:

http://d2vvqvds83fsd.cloudfront.net/vin02/vsmedia/definst/smil:event/18/36/06/3/rt/1/resources/180919_PID_Intelligent_Enterprise_Gruenewald_720p-5F92.smil/media_b433000_10.ts

那麼這個片段一共有多少個片段呢?在所有片段開始下載下傳之前,有這樣一個請求:chunklist即是視訊片段的清單。

自己開發的線上視訊下載下傳工具,基于Java多線程

通過這個清單我們知道這個視訊一共分為55個片段,序号從0開始。

自己開發的線上視訊下載下傳工具,基于Java多線程

了解了原理,我們就可以開始程式設計了。

1. 首先實作視訊片段的下載下傳邏輯,建立一個類,實作Runnable接口。

自己開發的線上視訊下載下傳工具,基于Java多線程

2. 使用JDK自帶的多線程庫 ExecutorService多線程下載下傳這些片段。ExecutorService實際是一個線程池。第15行可以指定線程池裡工作線程(Working thread)的個數。

自己開發的線上視訊下載下傳工具,基于Java多線程
自己開發的線上視訊下載下傳工具,基于Java多線程
自己開發的線上視訊下載下傳工具,基于Java多線程

下載下傳完成後,能在Eclipse的console控制台看到這些輸出:

自己開發的線上視訊下載下傳工具,基于Java多線程

下載下傳成功的視訊片段:

自己開發的線上視訊下載下傳工具,基于Java多線程

3. Merger負責把這些片段合并成一個大檔案。

自己開發的線上視訊下載下傳工具,基于Java多線程
自己開發的線上視訊下載下傳工具,基于Java多線程
自己開發的線上視訊下載下傳工具,基于Java多線程
自己開發的線上視訊下載下傳工具,基于Java多線程

完整的代碼在我的github上:

https://github.com/i042416/JavaTwoPlusTwoEquals5/tree/master/src/flick

繼續閱讀