視頻會(huì)議系統(tǒng)是一個(gè)綜合性非常強(qiáng)的實(shí)時(shí)系統(tǒng),因此在視頻會(huì)議開(kāi)發(fā)過(guò)程中,我們經(jīng)常會(huì)遇到很多程序上的瓶頸,瓶頸的產(chǎn)生一般都是因?yàn)檫\(yùn)算量過(guò)大,或者傳輸量過(guò)大甚至有些是因?yàn)樵O(shè)備輸出量較大引起的瓶頸等,因此這些瓶頸可能產(chǎn)生與運(yùn)算處理當(dāng)中,也可能產(chǎn)生在數(shù)據(jù)傳輸過(guò)程中和輸入、輸出過(guò)程中。下面我們就列舉一下視頻會(huì)議開(kāi)發(fā)過(guò)程中存在的瓶頸的部分及其解決辦法。
1、MCU服務(wù)器的數(shù)據(jù)處理
MCU服務(wù)器是整個(gè)視頻會(huì)議系統(tǒng)的核心,因此MCU服務(wù)器的傳輸效率直接影響到整個(gè)視頻會(huì)議系統(tǒng)的效應(yīng)時(shí)間和效率。MCU服務(wù)器主要是進(jìn)行轉(zhuǎn)發(fā)數(shù)據(jù),控制數(shù)據(jù)傳輸?shù)较鄳?yīng)的終端上,其傳輸方式一個(gè)有兩種,一直是在MCU上進(jìn)行合成,然后再傳輸?shù)狡渌慕K端,另外一種方式是MCU直接轉(zhuǎn)發(fā)數(shù)據(jù),然后再由終端對(duì)數(shù)據(jù)進(jìn)行合成。兩種方式各有利弊,在MCU上合成的方式,可以節(jié)省帶寬,不論是視頻還是音頻數(shù)據(jù)都在MCU服務(wù)器上進(jìn)行合成,會(huì)使到其傳輸數(shù)據(jù)量減少,但這種方式會(huì)占用較大的MCU服務(wù)器的CPU運(yùn)算資源。而另外一種方式,MCU服務(wù)器只是轉(zhuǎn)發(fā)數(shù)據(jù),不參與合成音、視頻,這種方式節(jié)省了MCU服務(wù)器的CPU運(yùn)算時(shí)間,但會(huì)增加MCU服務(wù)器的帶寬。對(duì)于這兩種方式,我們可以把運(yùn)算量小的音頻數(shù)據(jù)在MCU服務(wù)器上進(jìn)行合成,而運(yùn)算量較大的視頻數(shù)據(jù)采用直接轉(zhuǎn)發(fā)的模式,這樣既有效地減少了帶寬,也提高了MCU服務(wù)器的運(yùn)算效率。
2、終端的圖像重畫
視頻會(huì)議終端的圖像一般要求達(dá)到20幀以上,因此頻繁的重畫圖像需要終端的CPU運(yùn)算量也是很大,因此我們重畫圖像的時(shí)候必須要采用效率更高的方式,傳統(tǒng)的重畫方式是通過(guò)解碼后的圖像一幅一幅的進(jìn)行重繪,但其效率較低,我們可以通過(guò)底層的DirectDraw技術(shù)來(lái)進(jìn)行圖像的重畫,其重繪的方式是直接往顯卡里面輸入數(shù)據(jù),然后通過(guò)顯卡直接顯示數(shù)據(jù),該方式可以充分利用顯卡的底層接口,圖像輸出時(shí)間更快,大大地提高圖像的重畫效率。
3、圖像數(shù)據(jù)格式轉(zhuǎn)換
由于視頻會(huì)議的圖像都是經(jīng)過(guò)壓縮才進(jìn)行傳輸,而一般的視頻壓縮算法都不是直接獲取圖像的RGB數(shù)據(jù),它們接收的數(shù)據(jù)都是yuv420格式的數(shù)據(jù),而RGB轉(zhuǎn)yuv420數(shù)據(jù)是通過(guò)浮點(diǎn)運(yùn)算進(jìn)行,因此如果數(shù)據(jù)量大的情況下,其會(huì)消耗較大的CPU運(yùn)算時(shí)間,因此我們可以通過(guò)建立轉(zhuǎn)換表的方式來(lái)進(jìn)行提前進(jìn)行運(yùn)算設(shè)置,建立轉(zhuǎn)換表的方式也就是把所有可能進(jìn)行運(yùn)算的結(jié)果用表的方式進(jìn)行先加載,然后當(dāng)真正運(yùn)算的時(shí)候,查表就可以得到相應(yīng)的數(shù)據(jù)結(jié)果,這種通過(guò)空間來(lái)?yè)Q時(shí)間的方式,可以大大提高圖像的數(shù)據(jù)格式轉(zhuǎn)換效率。