1.綜述
? ? ? ? 社交載體從文字發(fā)展到靜態(tài)圖片枕荞,現(xiàn)又來到了視頻的時(shí)代蹬耘。在視頻時(shí)代欺嗤,每個(gè)移動(dòng)端app中的多媒體組件所需要承接的業(yè)務(wù)也越來越復(fù)雜,而且一家公司可能會(huì)出多款app累驮,因此一個(gè)好的多媒體組件需要有靈活的擴(kuò)展性以及方便的可移植性酣倾。根據(jù)這些需求,我們把一個(gè)多媒體組件(或者叫音視頻組件)拆分成源谤专、渲染組件以及輸出幾個(gè)部分躁锡。
2.源(source)
? ? ? ? 目前移動(dòng)端可能接受到的視頻源有攝像頭錄制的數(shù)據(jù)以及從手機(jī)存儲(chǔ)(包括SD卡)中的文件,未來可能還有AR設(shè)備或者其他外接設(shè)備所捕捉的數(shù)據(jù)(純YY)置侍。因此我們需要一個(gè)通用的接口來封裝視頻的輸入源映之。并且從不同輸入員獲取到的數(shù)據(jù)送去渲染(可能還包括一些預(yù)處理,如色彩格式轉(zhuǎn)換蜡坊、圖像分析等)的過程有點(diǎn)像生產(chǎn)者-消費(fèi)者模型杠输,因此我們還需要有一個(gè)管理數(shù)據(jù)緩沖隊(duì)列的組件來調(diào)控整個(gè)處理過程。
3.渲染(render)
? ? ? ?我們把視頻數(shù)據(jù)的預(yù)處理秕衙、添加額外特效(諸如動(dòng)態(tài)貼紙蠢甲、濾鏡、美顏等等)統(tǒng)稱為渲染据忘,可能與傳統(tǒng)的“渲染”定義不太一樣鹦牛,可以認(rèn)為是一個(gè)“加特效”的過程搞糕。不同的特效的實(shí)現(xiàn)過程不盡相同,因此如何統(tǒng)一管理所有的特效能岩;如何方便的修改寞宫、添加、禁止一個(gè)特效是“渲染”這個(gè)模塊需要考慮的拉鹃。這邊還會(huì)涉及到與c層的交互辈赋,因此渲染模塊會(huì)是整個(gè)視頻處理中最復(fù)雜也是最核心的模塊。
4.輸出(sink)
? ? ? ? 當(dāng)所有處理完成之后膏燕,最后需要做的就是將這個(gè)數(shù)據(jù)通過一定的方式顯示出來钥屈,或者寫入某個(gè)文件,或者推流到服務(wù)器上坝辫,這個(gè)工作就交由輸出模塊來完成篷就。因?yàn)椤拜敵觥钡男问揭彩嵌喾N多樣的,因此這邊也需要有一個(gè)統(tǒng)一的管理以及良好的擴(kuò)展近忙。
關(guān)于渲染的分層
1.上層業(yè)務(wù)
? ? ? ?諸如動(dòng)態(tài)貼紙竭业、濾鏡、ar等等特效在不同的項(xiàng)目中有著完全不一樣的配置及舍,包括數(shù)量未辆、順序、交互锯玛、資源等等咐柜,因此這些做為強(qiáng)業(yè)務(wù)向的配置邏輯需要有獨(dú)立的管理類去控制。
2.公共業(yè)務(wù)
? ? ? ? 雖然在不同項(xiàng)目中配置項(xiàng)各有各的不同攘残,但是繪制的內(nèi)容基本是可以枚舉的拙友,因此動(dòng)態(tài)貼紙、濾鏡歼郭、ar等這些會(huì)被歸為公共業(yè)務(wù)遗契。
3.底層庫
? ? ? ? 對(duì)于繪制的基礎(chǔ)功能則是一個(gè)通用的、抽象的接口病曾,可參考安卓系統(tǒng)GUI系統(tǒng)來設(shè)計(jì)整個(gè)繪制底層框架