日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
HarmonyOS三方件開發(fā)指南(16)-VideoCache視頻緩存

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

成都創(chuàng)新互聯(lián)公司成立于2013年,我們提供高端成都網(wǎng)站建設(shè)公司、網(wǎng)站制作成都網(wǎng)站設(shè)計(jì)、網(wǎng)站定制、成都全網(wǎng)營(yíng)銷、微信小程序、微信公眾號(hào)開發(fā)、成都網(wǎng)站營(yíng)銷服務(wù),提供專業(yè)營(yíng)銷思路、內(nèi)容策劃、視覺設(shè)計(jì)、程序開發(fā)來完成項(xiàng)目落地,為成都塔吊租賃企業(yè)提供源源不斷的流量和訂單咨詢。

和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.

引言

對(duì)于視頻播放器這個(gè)app大家都不陌生,在我們?nèi)粘I钪须S處可見,但對(duì)于用戶而言,最重要的就是如何能節(jié)約流量,使用簡(jiǎn)單,觀看視頻流暢等體驗(yàn)。對(duì)于Android VideoCache 在各大網(wǎng)站的學(xué)習(xí)文檔、教程已經(jīng)很多,而且層出不窮,但是對(duì)于鴻蒙來講,還是一個(gè)新的領(lǐng)域,因此,鴻蒙版的VideoCache 順勢(shì)而為,華麗的誕生了。

功能介紹

鴻蒙VideoCache視頻緩存組件,主要功能包括:視頻緩沖,在線播放視頻,邊下載邊緩存,緩沖進(jìn)度和播放進(jìn)度同時(shí)進(jìn)行,拖動(dòng)播放,橫豎屏切換,音量調(diào)節(jié)等主要功能。模擬機(jī)效果圖如下:

1.豎屏狀態(tài):

2.橫屏狀態(tài) 

接下來得內(nèi)容就是重中之重,對(duì)于開發(fā)者來講,如何簡(jiǎn)單并且快速的使用該VideoCache視頻緩存組件,這才是開發(fā)者最關(guān)注的問題。下面則詳細(xì)介紹VideoCache的使用以及開發(fā)指南。

VideoCache使用指南

? 新建工程, 添加組件Har包依賴

在應(yīng)用模塊中添加HAR,只需要將videocachelibrary-debug.har復(fù)制到entry\libs目錄下即可

? 修改配置文件 

1. 在entry下面的build.gradle添加library 的依賴,如圖所示:

1. 修改代碼中的配置: 

a. 在基類中實(shí)例化代理服務(wù),核心代碼如下:

 
 
 
 
  1. httpProxyCacheServer = 
  2.                 new HttpProxyCacheServer.Builder(theApplication).headerInjector(new UserAgentHeadersInjector()) 
  3.                 .maxCacheSize(1024 * 1024 * 1024)// 1 Gb for cache 
  4.                 .singleFileBandwidth(600)//單位KB,https需要1.5倍左右 
  5.                 .build(); 

b.在使用的地方初始化播放器,并調(diào)用代理服務(wù)將新生成的路徑傳入播放器,代碼如下:

 
 
 
 
  1. proxyUrl = BaseSlice.getProxy().getProxyUrl("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"); 
  2.     BaseSlice.getProxy().registerCacheListener(mCacheListener, proxyUrl);//緩存監(jiān)聽 
  3.     playerVideo = new PlayerVideo(this, proxyUrl, this, layout); 
  4.     playerVideo.setDisplayMath(0, 1000); 

c.其他相關(guān)設(shè)置方法,代碼如下:

 
 
 
 
  1. * 設(shè)置播放器的寬高 
  2.  dependentLayout.setWidth(width); 
  3.      dependentLayout.setHeight(height); 
  4. 或者: 
  5. dependentLayout.setWidth(ComponentContainer.LayoutConfig.MATCH_PARENT); 
  6.         dependentLayout.setHeight(ComponentContainer.LayoutConfig.MATCH_PARENT); 
  7.      
  8.  * 設(shè)置播放器的橫豎屏 
  9. //橫屏 
  10. abilitySlice.getAbility().setDisplayOrientation(AbilityInfo.DisplayOrientation.LANDSCAPE); 
  11. //豎屏 
  12. abilitySlice.getAbility().setDisplayOrientation(AbilityInfo.DisplayOrientation.PORTRAIT); 
  13. //系統(tǒng)判斷 
  14. abilitySlice.getAbility().setDisplayOrientation(AbilityInfo.DisplayOrientation.UNSPECIFIED); 
  15. //跟隨棧中應(yīng)用 
  16. abilitySlice.getAbility().setDisplayOrientation(AbilityInfo.DisplayOrientation.FOLLOWRECENT); 
  17.  
  18.  
  19.  * 初始化播放器 
  20. player = new Player(context); 
  21.     surfaceProvider.pinToZTop(false); 
  22.     java.util.Optional optional = surfaceProvider.getSurfaceOps(); 
  23.     SurfaceOps surfaceOps = optional.get(); 
  24.     surfaceOps.addCallback(new VideoSurfaceCallback(surfaceOps, loadUrl, 
  25.             player, this 
  26.     )); 
  27.  
  28.  * 播放方法 
  29.  player.play(); 
  30.  
  31.  * 暫停播放方法 
  32.  player.pause(); 
  33. 1. 

VideoCache開發(fā)指南

在上述中,已經(jīng)大概說了VideoCache 的功能點(diǎn),視頻緩沖,在線播放視頻,邊下載邊緩存,緩沖進(jìn)度和播放進(jìn)度同時(shí)進(jìn)行,拖動(dòng)播放,橫豎屏切換,音量調(diào)節(jié)等主要功能,接下來一 一說明主要實(shí)現(xiàn)方法。

在視頻播放器中,最常見的就是緩沖進(jìn)度條,進(jìn)度條用戶可以很直觀的看到目前已經(jīng)緩沖的視頻有多少,緩沖了多長(zhǎng)時(shí)間,進(jìn)度條設(shè)置代碼如下:

progressBar.setMaxValue(100);

progressBar.setMinValue(0);

progressBar.setProgressValue(cacheProgress);

通過根據(jù)已經(jīng)緩沖的字節(jié),即可計(jì)算出cacheProgress

MaxValue 值不是固定的100,也可以按照視頻的時(shí)長(zhǎng)、字節(jié)等設(shè)置,然后計(jì)算百分比即可,根據(jù)具體需求設(shè)計(jì)。

MinValue設(shè)置progress 的起始點(diǎn),最初的起始點(diǎn)肯定是0,但是當(dāng)視頻在播放中途,暫停,在開始的時(shí)候,則需要設(shè)置為暫停時(shí)的值,這樣不至于又回到0來觀看視頻。

最后,既然是視頻緩存組件,那么重中之重就是如何緩存,接下來重點(diǎn)介紹: 

VideoCache主要通過代理策略將網(wǎng)絡(luò)請(qǐng)求代理到本地服務(wù),本地在決定是從本地緩存拿數(shù)據(jù)還是發(fā)起網(wǎng)絡(luò)請(qǐng)求,如果發(fā)起網(wǎng)絡(luò)請(qǐng)求就先將數(shù)據(jù)寫入緩存,再從本地提供視頻數(shù)據(jù)給視頻播放器,參考下圖:

這樣就達(dá)到了邊播放邊緩存的策略。

具體步驟如下: 

1.在項(xiàng)目的基類初始化一個(gè)全局的代理服務(wù)HttpProxyCacheServer,

2.生成緩存文件名,默認(rèn)是使用的 MD5 方式生成 key,考慮到一些業(yè)務(wù)邏輯,我們也可以繼承一個(gè) FileNameGenerator 來實(shí)現(xiàn)自己的策略,具體代碼如下:

3.本地代理實(shí)現(xiàn)策略,首先是構(gòu)造一個(gè)本地127.0.0.1的ServerSocker,隨機(jī)分配了一個(gè)端口,然后啟動(dòng)一個(gè)線程去執(zhí)行WaitRequestsRunnable,在這里面執(zhí)行 waitForRequest,通過 accept() 方法監(jiān)聽這個(gè)服務(wù)器 socket 的入站連接,accept() 方法會(huì)一直阻塞,直到有一個(gè)客戶端嘗試建立連接。

1. FileCache類 

類中規(guī)定了緩存文件的命名格式(后加.download)和存儲(chǔ)的路徑,完成了緩存文件的創(chuàng)建。

2. Files類

此類是對(duì)JAVA中原有的File類的封裝,原File類僅可處理一個(gè)文件,F(xiàn)iles類可同時(shí)對(duì)多個(gè)文件進(jìn)行處理。 

如下代碼中,getLruListFiles()方法的參數(shù)是一個(gè)directory,在方法中對(duì)directory(文件夾路徑)下的所有文件進(jìn)行拆分,返回了一個(gè)File參數(shù)類型的List列表,后續(xù)可對(duì)列表中的各個(gè)File文件進(jìn)行處理。

3. LruDiskUsage類 

此類主要用于控制緩存文件的大小,它與Videocache平行開了一個(gè)線程,實(shí)時(shí)記錄緩存文件的數(shù)量、大小、存儲(chǔ)空間等,超過預(yù)設(shè)的閾值時(shí),執(zhí)行特定的優(yōu)化操作。

4. Md5FileNameGenerator類 

此類實(shí)現(xiàn)了為輸入文件路徑,生成對(duì)應(yīng)的MD5值的功能。MD5值是一種被"壓縮"的保密格式,可以確保信息完整傳輸。

5. TotalCountLruDiskUsage類、TotalSizeLruDiskUsage類和UnlimitedDiskUsage類

LruDiskUsage類是標(biāo)題中前兩個(gè)類的父類,同時(shí)控制緩存文件的大小和數(shù)量,需要判斷當(dāng)前緩存文件的(總大小 & 總數(shù)量)未超過閾值時(shí),才會(huì)緩存新的文件。 TotalCountLruDiskUsage類和TotalSizeLruDiskUsage類分別只對(duì)緩存文件總數(shù)量或者緩存文件總大小進(jìn)行限制,滿足一個(gè)條件便可以緩存新的文件。

TotalCountLruDiskUsage類和TotalSizeLruDiskUsage類各有兩個(gè)方法:一個(gè)方法用于設(shè)定緩存文件的閾值;一個(gè)方法用于判斷當(dāng)前緩存數(shù)據(jù)是否超過了設(shè)定的閾值。 

當(dāng)不需要進(jìn)行磁盤的緩存限制時(shí)使用UnlimitedDiskUsage類,其本身是一個(gè)空的類,不對(duì)緩存文件的數(shù)量和大小做任何限制。

更多原創(chuàng),請(qǐng)關(guān)注"軟通動(dòng)力HarmonyOS學(xué)院https://harmonyos./column/30

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.


本文名稱:HarmonyOS三方件開發(fā)指南(16)-VideoCache視頻緩存
網(wǎng)站地址:http://www.5511xx.com/article/cojjspd.html