由于傳統(tǒng)采用RGB 格式存儲數(shù)據(jù)流以用于多畫面合成的方法十分浪費資源。因此,為了在有限的頻帶條件下限度地提高資源利用率,本文提出了一種在不影響畫面質(zhì)量的同時解決其資源利用問題的新方案。事實上。多畫面軟件已經(jīng)應(yīng)用到生活的諸多領(lǐng)域。而且將會有更廣泛地使用。
1 數(shù)據(jù)流的捕捉
Windows 下捕獲數(shù)據(jù)包的過程如下,其中NDIS 的NDIS (Network Driver InteRFace Specification)是Microsoft 和3Com 公司聯(lián)合制定的網(wǎng)絡(luò)驅(qū)動規(guī)范,該規(guī)范提供有大量的操作函數(shù)。它可為上層的協(xié)議驅(qū)動提供服務(wù),從而屏蔽了下層各種網(wǎng)卡的差別。NDIS 向上可支持多種網(wǎng)絡(luò)協(xié)議,例如TCP/IP、NWLink IPX/SPX、NETBEUI 等,向下則可支持不同廠家生產(chǎn)的多種網(wǎng)卡。
利用 winpcap 進行網(wǎng)絡(luò)數(shù)據(jù)包的捕獲和過濾的設(shè)計步驟如下:
(1)打開網(wǎng)卡,設(shè)置網(wǎng)卡為混雜模式;
(2)回調(diào)函數(shù)Network Tap,得到命令后從網(wǎng)絡(luò)設(shè)備驅(qū)動程序處收集數(shù)據(jù)包,并把到的數(shù)據(jù)包傳送給過濾程序;
(3)當Packet filter 到數(shù)據(jù)包到達時,NDIS 中間驅(qū)動程序調(diào)用分組驅(qū)動程序,該程序可將數(shù)據(jù)傳遞給每一個參與進程的分組過濾程序;
(4)由Packet filter過濾程序決定丟棄或接收數(shù)據(jù)包,并將接收的數(shù)據(jù)拷貝到相應(yīng)的程序;
(5)通過分組過濾器后,再將未過濾掉的數(shù)據(jù)包提交給核心緩沖區(qū),當系統(tǒng)緩沖區(qū)滿后,再將數(shù)據(jù)包拷貝到用戶緩沖區(qū)。程序可以直接從用戶緩沖區(qū)中讀取捕獲的數(shù)據(jù)包;
(6)關(guān)閉網(wǎng)卡。
2 視頻數(shù)據(jù)流的編解碼
捕獲到的視頻數(shù)據(jù)流。通常在網(wǎng)絡(luò)傳輸中都采用H.263或者 視頻編碼建議,其圖像格式為CIF格式。H.263-CIF格式的數(shù)據(jù)流是一種壓縮編碼圖像格式,這種格式在網(wǎng)絡(luò)傳輸過程中可節(jié)省頻帶資源,可在有限的帶寬下限度地提高資源利用率。但是,CIF格式必須經(jīng)過處理才能應(yīng)用于多畫面合成。只有通過解碼使捕獲到的視頻數(shù)據(jù)流變成YUV(RGB)格式后,此圖像格式才可直接運用于多畫面合成,而且此格式的圖像合成也比較方便、快捷。為了使圖像由 H.263格式轉(zhuǎn)變?yōu)閅UV(RGB)格式,應(yīng)運用H.263進行解碼。
3 視頻的多畫面合成
視頻數(shù)據(jù)流經(jīng)過解碼之后,可將其變成YUV(RGB)格式。下一環(huán)節(jié)即是視頻數(shù)據(jù)流的合成(多畫面合成),這也是本文的關(guān)鍵技術(shù)。在視頻會議系統(tǒng)中,參加會議的與會者或許不只兩、三個,所有與會者可能分布全國乃至世界各地。為了使每個與會者都能進行面對面的直接交流,就需要在同一時間看到所有的與會者,因此,多畫面合成技術(shù)。通過多畫面合成能使N個不同的視頻畫面實時地在同一臺顯示器上顯示,這樣,每一位與會者就都可以運用該軟件看到其他成員。
YUV主要的采樣格式有YCbCr4:2:O、YCbCr4:2:2、YCbCr4:1:1和YCbCr4:4.:4。其中YCbCr4:1:1比較常用,其含義是每個點保存一個8 bit的亮度值(也就是Y值),每2x2個點保存一個Cr和Cb值,這樣,圖像在人的視覺中不會起太大的變化。RGB (R,G,B都是8 bit unsigned)模型的4個點需要8×3=24 bits,而現(xiàn)在僅需要8+(8/4)+(8/4)=12 bits,平均每個點占12 bits。這樣就把圖像的數(shù)據(jù)壓縮至一半。YUV411為每個像素都提取Y分量,UV分量在水平方向上每4個像素采樣一次。YUV420并非V分量采樣為 0,而只是跟YUV411相比,在水平方向上提高了一倍的色差采樣頻率,并在垂直方向上以U/V間隔的方式減小了一半色差采樣。