成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

iOS短視頻播放緩存之道

OnlyLing / 3403人閱讀

摘要:一套基于短視頻播放緩存庫地址。由于針對短視頻的播放不存在進度拖拽或功能,所以每次下載到的數據可以直接通過緩存管理的相關方法直接到緩存文件末尾。

一套基于AVPLayer短視頻播放緩存庫ShortMediaCache GitHub地址。

主要特點:

1.為短視頻量身設計,接入方便,不侵占業(yè)務

2.邊播變緩存,緩存后直接播放

3.預加載功能,秒播下一條短視頻

4.自動緩存管理

原文地址

業(yè)務背景

公司電商APP接入短視頻模塊也有半年多的時間了,之間一直在忙著完善業(yè)務功能,現在是時候沉淀下來總結這一路來的收獲。

視頻播放對于ios開發(fā)來說其實并不是一個難事兒,簡單幾行代碼就能實現,確實,最初的短視頻播放也是基于此,給定視頻url直接丟給系統播放器(AVPlayer)就可以播放了。但是隨著短視頻業(yè)務發(fā)力,短視頻模塊在APP業(yè)務中承擔了更多更重要的角色,如何提升短視頻的播放速度變得尤為重要,隨之便提出了短視頻邊播變緩存,短視頻預加載相關功能要求。

業(yè)務分析,公司APP主業(yè)務是電商,短視頻作為為電商引流業(yè)務,提高APP活躍度的業(yè)務模塊,同時在APP其他業(yè)務功能中也存在視頻播放,例如商品詳情頁面商品介紹,基于此設計之初并不打算將所有的播放業(yè)務耦合在一起,因為短視頻的播放概率遠遠大于其他長視頻,依次業(yè)務需求大致分為2類邏輯,短視頻和在線播放,對于短視頻統一按照短視頻播放模塊來執(zhí)行邊播變緩存,而其他的相對比較長一些的視頻則直接在線播放也不緩存,此處也不做過多介紹。

邊播邊緩存的實現

短視頻播放特點:
1、全屏播放
2、快速播放,爭取每個短視頻都能秒播
3、內容高度濃縮,無需進度條與拖拽進度
4、精彩的短視頻可能會被重復觀看幾次
5、其他(聲音控制、流量)

基于以上特點,可以大致將短視頻播放劃分為2個層級,第1層為播放器層,第2層為緩存層,播放器層是基于緩存層的,主要負責播放過程控制和UI展現,比如暫停,繼續(xù),聲音控制,暫停播放顯示控制以及其他的UI;播放器層對于每個APP可能會有不同的業(yè)務需求,實現的功能也大不相同,故將緩沖層與播放器層剝離,而緩存層則主要負責短視頻內容的下載,預加載,緩存管理,這也是ShortMediaCache的主要功能。

如何從緩存播放

ShortMediaCache緩存播放邏輯大致的實現結構如下圖:

對于AVPlayer連接播放器層與緩存層的數據交互是通過自定義實現AVAssetResourceLoaderDelegate協議實現的,在播放器加載的過程中,播放器會通過AVPlayerItem向AVURLAsset的resourceLoader獲取需要加載數據信息,比如加載的數據偏移,大小等,最終這些數據請求(AVAssetResourceLoadingRequest)會到達其代理(AVAssetResourceLoaderDelegate)對象,代理對象根據請求數據的位置和大小,去讀取相關文件緩存數據,然后回填給請求,以此來響應播放器的數據緩沖請求,與此同時緩存層通過網絡請求將下載下來的數據寫入文件保存。

對于AVAssetResourceLoaderDelegate協議主要需要實現以下方法:

- (BOOL)resourceLoader:(AVAssetResourceLoader *)resourceLoader shouldWaitForLoadingOfRequestedResource:(AVAssetResourceLoadingRequest *)loadingRequest;

播放器的數據加載請求會放到loadingRequest里面,通過其dataRequest對象的requestedOffset和requestedLength可以知道本次數據請求的區(qū)塊,從緩存文件中按需讀取數據填充后執(zhí)行finishLoading方法即可完成本次數據請求

- (void)resourceLoader:(AVAssetResourceLoader *)resourceLoader didCancelLoadingRequest:(AVAssetResourceLoadingRequest *)loadingRequest;

請求取消回調

下載

對于下載應該放到子線程中去通過NSURLSession來實現,因為視頻文件可能之前已經緩存了部分,需要從已緩存的位置大小處繼續(xù)下載緩存,在每次開啟下載前需要去讀取已緩存文件的大小,并設置請求頭部字段Range便可從此處繼續(xù)下載后面未下載的部分。

NSString *range = [NSString stringWithFormat:@"bytes=%ld-", (long)cachedSize];
[downloadRequest setValue:range forHTTPHeaderField:@"Range"];

由于針對短視頻的播放不存在進度拖拽或seek功能,所以每次下載到的數據可以直接通過緩存管理的相關方法直接append到緩存文件末尾。
因為短視頻的播放首要任務就是保證當前單個視頻的流暢播放,所以在理論上只會存在一個下載任務來獨享所有的下載帶寬,當在空閑狀態(tài)的情況下才適合去做其他的短視頻資源的預加載。

緩存管理

緩存主要創(chuàng)建了三個目錄管理,分別為temp、media和trash目錄,緩存分為臨時緩存和最終緩存,當短視頻資源未下載完時是放在一個目錄下的(temp目錄)、而當視頻資源緩存完時移動到另外一個目錄(media),這樣分別存放便能方便讀取和管理兩種狀態(tài)的緩存,所有需要刪除的緩存文件都是先移入trash目錄,隨后再刪除以此來保證較高的刪除效率。所有文件命名使用的是視頻資源的url md5值保證唯一性。

緩存應該具有自動管理功能,以防止其無限膨脹,默認配置下ShortMediaCache允許臨時緩存最多保存1天,最大100Mb,而最終緩存則允許最多保存2天最大200Mb,如果業(yè)務需要可以自定義ShortMediaCacheConfig配置實現。

預加載

要實現下一個視頻或者幾個視頻能快速的播放起來,預加載的下載任務應該和正常的邊下邊播任務區(qū)分開,因為首先應該保證正在播放的短視頻能順暢的播放,所以邊下邊播任務優(yōu)先級應該高于預加載任務,在沒有邊下邊播任務時才能執(zhí)行預加載任務,并且當有新的邊下邊播任務時應當停止當前的預加載任務,首要執(zhí)行邊下邊播任務。

ShortMediaCache提供了預加載功能實現,通過調用ShortMediaManager以下方法:

- (void)resetPreloadingWithMediaUrls:(NSArray *)mediaUrls;

使用者可以多次調用此方法,來不斷更新需要預加載的資源隊列

ShortMediaCache使用方式

下載源碼文件,將ShortMediaCache文件夾引入工程, 通過ShortMediaResourceLoader來創(chuàng)建AVPlayer需要播放視頻的AVPlayerItem即可

#import "ShortMediaResourceLoader.h"
ShortMediaResourceLoader _resourceLoader = [ShortMediaResourceLoader new];
AVPlayerItem _playerItem = [_resourceLoader playItemWithUrl:videoUrl]; 
AVPlayer _player = [AVPlayer playerWithPlayerItem:_playerItem];

正常情況下應該持有_resourceLoader對象

預加載視頻

[[ShortMediaManager shareManager] resetPreloadingWithMediaUrls:preloadUrls];

preloadUrls存放需要預加載的視頻url

持續(xù)更新

ShortMediaCache大致類調用邏輯圖如下:

更多功能細節(jié)和使用方式請前往ShortMediaCacheGitHub地址,下載源碼運行Demo體驗,后續(xù)會持續(xù)完善此庫和其Demo,如果喜歡歡迎Star,使用問題請Issue.

參考:
https://mp.weixin.qq.com/s/v1...
http://msching.github.io/blog...

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/62036.html

相關文章

  • CDN高級技術專家周哲:深度剖析視頻分發(fā)過程中的用戶體驗優(yōu)化技術點

    摘要:講解從三個部分展開短視頻應用場景阿里云短視頻解決方案阿里云對短視頻用戶體驗的相關優(yōu)化。同時,為了面對業(yè)務的突發(fā)流量,阿里云提供了超過的帶寬儲備,為持續(xù)增長的業(yè)務保駕護航。二播放卡頓是指在播放過程中的不流暢情況,會嚴重影響用戶體驗。 深圳云棲大會已經圓滿落幕,在3月29日飛天技術匯-彈性計算、網絡和CDN專場中,阿里云CDN高級技術專家周哲為我們帶來了《海量短視頻極速分發(fā)》的主題分享,帶...

    alphahans 評論0 收藏0
  • 對話架構師:億級視頻社交「美拍」架構實戰(zhàn)

    摘要:本文系美圖架構師麥俊生,在直聘主辦的直聘學院對話架構師活動上的分享整理,介紹短視頻社交美拍架構實踐的總結。目前每天美拍視頻日播放量在億以上,日視頻播放時長達到萬小時。 本文系美圖架構師麥俊生,在Boss直聘主辦的直聘學院「對話架構師」活動上的分享整理,介紹短視頻社交美拍架構實踐的總結。 showImg(https://segmentfault.com/img/bVskCA); 麥俊生,...

    testHs 評論0 收藏0

發(fā)表評論

0條評論

OnlyLing

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<