boss讓我寫博客诊县,說(shuō)能裝X,我就來(lái)了4胱蟆R廊!??
這篇文章最先發(fā)布在簡(jiǎn)書上媳荒,今天先拿過(guò)來(lái)做開(kāi)山篇抗悍。
額~~文采不好驹饺,不知道怎么寫
來(lái)吧钳枕,直接切入正題,給大家看看效果吧赏壹,免得不是大家想要的東西鱼炒,浪費(fèi)大家的寶貴時(shí)間。
本來(lái)想給大家看視頻的蝌借,但是不知道怎么放昔瞧,哈哈哈。
再來(lái)看IdiotAVplayer實(shí)現(xiàn)了什么功能吧菩佑。
相信大家看完上面的圖片自晰,大概就知道IdiotAVplayer實(shí)現(xiàn)了怎樣的功能了,主要就是在選擇時(shí)間后(seek操作)稍坯,之前加載的部分會(huì)被保存酬荞,下次打開(kāi)會(huì)按需加載。本地有數(shù)據(jù)就從本地取瞧哟,沒(méi)有就從網(wǎng)絡(luò)然烨伞(前提是服務(wù)器支持Rang,不然沒(méi)法獲取指定區(qū)間的數(shù)據(jù))勤揩。目前為止咧党,網(wǎng)上最多的關(guān)于緩存的文章就是AVAssetResourceLoader,但是絕大多數(shù)不能再seek動(dòng)作之后繼續(xù)緩存陨亡,每次seek之后整個(gè)音視頻就從seek的時(shí)間開(kāi)始了傍衡,seek之前的都作廢。那么怎么才能實(shí)現(xiàn)一個(gè)分片緩存的播放器呢负蠕?
目前為止聪舒,就我搜索到的開(kāi)源框架有唱吧團(tuán)隊(duì)提供的 KTVHTTPCache(可能還有其他的),是不錯(cuò)虐急。但是它很重箱残,不夠輕量。下面引用下唱吧github文章的一段
方案演進(jìn)
在音視頻緩存上,我們一共采用過(guò)如下 4 個(gè)方案:AVPlayer 純?cè)诰€播放被辑。
AVPlayer + AVAssetResourceLoader + 下載模塊燎悍。
AVPlayer + 一個(gè)開(kāi)源的緩存項(xiàng)目(同樣基于 AVAssetResourceLoader + 下載模塊)。
AVPlayer + KTVHTTPCache盼理。
方案 1 簡(jiǎn)單直接谈山,缺點(diǎn)也不必多說(shuō)。
方案 2 的下載模塊設(shè)計(jì)的比較簡(jiǎn)單宏怔,只能順序下載奏路,不支持分片。導(dǎo)致只能 Seek 到已下載完的地方臊诊,在用戶體驗(yàn)上會(huì)有較大的缺陷鸽粉。
方案 3 在功能上已經(jīng)可以滿足需求,但在使用中問(wèn)題較多抓艳,我們?cè)谠创a基礎(chǔ)上做了很多修改來(lái)填坑触机。但穩(wěn)定性依然不是很理想,上線不長(zhǎng)時(shí)間就將該功能下掉了玷或。
方案 4 是唱吧現(xiàn)在的線上方案儡首,目前在我們的使用場(chǎng)景中還沒(méi)有發(fā)現(xiàn)問(wèn)題。除穩(wěn)定性的提升外偏友,比較大的改進(jìn)是增加了全路徑的 Log 模塊蔬胯。若用戶或測(cè)試同學(xué)遇到問(wèn)題,只需簡(jiǎn)單描述并回傳 Log位他,就可以快速定位到原因氛濒,大大提高了調(diào)試效率。
既然覺(jué)得唱吧框架很重棱诱,那就去尋求比較輕量級(jí)的解決方案泼橘。因?yàn)槲议_(kāi)發(fā)的app也是重音視頻業(yè)務(wù)的。造個(gè)輪子出來(lái)是一勞永逸的事情迈勋。
方案一是純?cè)诰€炬灭,略過(guò)。
方案二就是大家熟知的AVPlayer + AVAssetResourceLoader靡菇。這里我思考了下重归,既然通過(guò)自己的加載方式把數(shù)據(jù)返回給了AVAssetResourceLoader,那么就應(yīng)該有辦法保存那些已經(jīng)下載的數(shù)據(jù)(IdiotAVPlayer就是基于這么個(gè)方案)厦凤。
原理圖(不會(huì)畫鼻吮,將就著看吧)
(有朋友反映,有些視頻下載不下來(lái)较鼓,不知道是不是網(wǎng)絡(luò)問(wèn)題椎木,還是視頻格式問(wèn)題违柏,我也不懂啊,后面請(qǐng)教我boss 哈哈??)
好了香椎,今天先裝到這里吧
待續(xù)(其實(shí)我也不知道有沒(méi)有后續(xù))