互聯(lián)網(wǎng)內(nèi)容創(chuàng)新的道路上短視頻源碼必走的路
實(shí)際上,互聯(lián)網(wǎng)的內(nèi)容行業(yè)正在進(jìn)階,從文字、圖片到視頻、直播,再到能填補(bǔ)用戶碎片時(shí)間的短視頻開發(fā),這是一個(gè)趨于互動(dòng)性、實(shí)時(shí)性的迭代。
從4G普及、資費(fèi)下調(diào)、編解碼技術(shù)進(jìn)步和移動(dòng)硬件的品質(zhì)提升,也為短視頻的發(fā)展提供了良好客觀因素。從產(chǎn)品形態(tài)層面看,短視頻本身也擁有創(chuàng)作門檻低、內(nèi)容精煉、易于發(fā)酵等屬性,更易于傳播。綜合這幾點(diǎn),短視頻源碼創(chuàng)業(yè)才如此蓬勃。那作為國內(nèi)領(lǐng)先的云服務(wù)廠商,釋放更多技術(shù)能力,給開發(fā)者帶來便利是阿里云義不容辭的責(zé)任。
功能說明
1.錄制:支持?jǐn)帱c(diǎn)錄制、回刪、點(diǎn)擊拍攝、長按拍攝、美顏、實(shí)時(shí)濾鏡、閃關(guān)燈、攝像頭切換、分辨率設(shè)定等功能;
2.導(dǎo)入:支持從相冊(cè)選擇視頻、按視頻時(shí)長和畫面進(jìn)行裁剪;
3.上傳:上傳本地文件到阿里云視頻點(diǎn)播平臺(tái)。
核心優(yōu)勢(shì)
1.提供產(chǎn)品級(jí)SDK,最快2小時(shí)接入,節(jié)省自行開發(fā)耗費(fèi)的人力物力,助你快速實(shí)現(xiàn)APP 短視頻功能;
2.接口簡單易用,開放性強(qiáng),標(biāo)準(zhǔn)版(UI開源)可以根據(jù)業(yè)務(wù)自由定制UI;
3.錄制功能自帶斷點(diǎn)錄制、實(shí)時(shí)濾鏡、高效美顏功能,支持本地視頻導(dǎo)入壓縮裁剪;
4.迭代打磨,穩(wěn)定可靠,視頻技術(shù)經(jīng)釘釘、美柚、梨視頻、迅雷、貝貝網(wǎng)、寶寶樹、螞蜂窩等1000+應(yīng)用商用驗(yàn)證,穩(wěn)定可靠;
基礎(chǔ)知識(shí):I幀、B幀、P幀
I幀表示關(guān)鍵幀。你可以理解為這一幀畫面的完整保留;解碼時(shí)只需要本幀數(shù)據(jù)就可以完成。(因?yàn)榘暾嬅妫?/p>
P幀表示這一幀跟之前的一個(gè)關(guān)鍵幀(或P幀)的差別。解碼時(shí)需要用之前緩存的畫面疊加上本幀定義的差別,生成最終畫面。(也就是差別幀,P幀沒有完整畫面數(shù)據(jù),只有與前一幀的畫面差別的數(shù)據(jù))
B幀是雙向差別幀。B幀記錄的是本幀與前后幀的差別(具體比較復(fù)雜,有4種情況)。換言之,要解碼B幀,不僅要取得之前的緩存畫面,還要解碼之后的畫面,通過前后畫面的與本幀數(shù)據(jù)的疊加取得最終的畫面。
B幀壓縮率高,但是編解碼時(shí)會(huì)比較耗費(fèi)CPU,而且在直播中可能會(huì)增加直播延時(shí),因此在移動(dòng)端上一般不使用B幀。
短視頻源碼關(guān)鍵幀緩存策略
一個(gè)典型的視頻幀序列為IBBPBBPBBP……
對(duì)于直播而言,為了減少直播的延時(shí),通常在編碼時(shí)不使用B幀。P幀B幀對(duì)于I幀都有直接或者間接的依賴關(guān)系,所以播放器要解碼一個(gè)視頻幀序列,并進(jìn)行播放,必須首先解碼出I幀,其后續(xù)的B幀和P幀才能進(jìn)行解碼,這樣服務(wù)端如何進(jìn)行關(guān)鍵幀的緩存,則對(duì)直播的延時(shí)以及其他方面有非常大的影響。
比較好的策略是服務(wù)端自動(dòng)判斷關(guān)鍵幀的間隔,按業(yè)務(wù)需求緩存幀序列,保證在緩存中存儲(chǔ)至少兩個(gè)或者以上的關(guān)鍵幀,以應(yīng)對(duì)低延時(shí)、防卡頓、智能丟包等需求。
延遲與卡頓的折中
直播的延時(shí)與卡頓是分析直播業(yè)務(wù)質(zhì)量時(shí),非常關(guān)注的兩項(xiàng)指標(biāo)。互動(dòng)直播的場景對(duì)延時(shí)非常敏感,新聞體育類直播則更加關(guān)注播放的流暢度。
然而,這兩項(xiàng)指標(biāo)從理論上來說,是一對(duì)矛盾的關(guān)系——需要更低的延時(shí),則表明服務(wù)器端和播放端的緩沖區(qū)都必須更短,來自網(wǎng)絡(luò)的異常抖動(dòng)容易引起卡頓;業(yè)務(wù)可以接受較高的延時(shí)時(shí),服務(wù)端和播放端都可以有較長的緩沖區(qū),以應(yīng)對(duì)來自網(wǎng)絡(luò)的抖動(dòng),提供更流暢的直播體驗(yàn)。
當(dāng)然,對(duì)于網(wǎng)絡(luò)條件非常好的用戶,這兩項(xiàng)是可以同時(shí)保證的,這里主要是針對(duì)網(wǎng)絡(luò)條件不是那么好的用戶,如何解決延時(shí)與卡頓的問題。
這里通常有兩種技術(shù)來平衡和優(yōu)化這兩個(gè)指標(biāo)。
一是服務(wù)端提供靈活的配置策略,對(duì)于延時(shí)要求更敏感的,則在服務(wù)端在保證關(guān)鍵幀的情況下,對(duì)每個(gè)連接維持一個(gè)較小的緩沖隊(duì)列;對(duì)于卡頓要求更高的直播,則適當(dāng)增加緩沖隊(duì)列的長度,保證播放的流暢。
二是服務(wù)端對(duì)所有連接的網(wǎng)絡(luò)情況進(jìn)行智能檢測(cè),當(dāng)網(wǎng)絡(luò)狀況良好時(shí),服務(wù)端會(huì)縮小該連接的緩沖隊(duì)列的大小,降低延遲;而當(dāng)網(wǎng)絡(luò)狀況較差時(shí),特別是檢測(cè)到抖動(dòng)較為明顯時(shí),服務(wù)端對(duì)該連接增加緩沖隊(duì)列長度,優(yōu)先保證播放的流暢性。
從技術(shù)角度來講短視頻SDK架構(gòu),分為四個(gè)層面,底層拆分成一個(gè)一個(gè)組件,在這些組件上組建自己的業(yè)務(wù)組件,包括編輯和播放。在這之上,我們?cè)偬峁┍容^穩(wěn)定恩UI控件。這個(gè)架構(gòu)有幾個(gè)特點(diǎn),我們提供產(chǎn)品級(jí)別的DEMO,用戶可以不做任何修改直接上線,SDK的易用性比較強(qiáng)。底層是高度模塊化的,開發(fā)者可以根據(jù)不同的業(yè)務(wù)場景來按需求打包,控制包的大小。
除短視頻端功能外,做好一個(gè)短視頻源碼SDK的核心我們認(rèn)為有幾個(gè)要點(diǎn):清晰度,穩(wěn)定性,合成速度可結(jié)合全鏈路的視頻云服務(wù)和云計(jì)算產(chǎn)品,短視頻開發(fā)需求一站式解決。