1. 引 言
開源軟件不僅僅是源碼開放,更重要的是它們的使用規則。開源軟件潛在的巨大的社會計算能力,如同取之不盡的能源,近年來被更多的人們和各國政府所認識[1]。Ekiga是GnomeMeeting的升級,憑借其穩定的性能以及豐富的功能,已得到了越來越多用戶的青睞。同時,它也是Ubuntu中默認兼容SIP和H.323的VoIP,IP電話和視頻會議應用程序。目前,Ekiga在龍芯PC上運行不穩定,占系統資源多,處理速度慢,有待進一步研究并優化。
基于以上分析,本課題的研究目標就是基于Linux基礎上,研究分析開源軟件Ekiga,進行Ekiga的移植,然后重點分析音視頻,使其占用的系統資源減少,處理速度加快。
龍芯2E處理器是一款實現64位MIPS III指令集的通用RISC(Reduced Instruction Set Computer,精簡指令集計算機)處理器。雖然指令在保證依賴關系的前提下進行亂序執行,但是指令的提交還是按照程序原來的順序,以保證精確中斷和訪存順序執行。
龍芯2E先進的存儲系統設計可以有效地提高流水線的效率。龍芯2E的基本流水線包括取指、預譯碼、譯碼、寄存器重命名、調度、發射、讀寄存器、執行、提交等9級。這是基本指令的流水級,對于一些較復雜的指令,如定點乘除法指令,在執行階段需要多拍。
3. Ekiga架構
Ekiga運行首先調用ekiga.cpp,其中包含了主GM(Ekiga)類。下面是主架構圖。
圖3-1 主架構圖
龍芯PC采用的Linux系統是Debian GNU/Linux(版本為Linux-2.6.18)。所以本課題在Debian系統的GTK中開發。
4.2 交叉編譯環境
交叉編譯環境是一套由編譯器、連接器和libc庫等組成的開發環境。由于一般嵌入式開發系統功能有限,不能提供足夠的資源供編譯過程使用,因而通常都要在PC機上建立一個用于目標機的交叉編譯環境,將編譯工程轉移到高性能的主機中進行編譯。本課題使用的工具鏈為GNU交叉開發工具集,主要包括編譯器gcc/g++、匯編器as、鏈接器ld、調試器gdb[2]、glibc庫以及其他一些二進制工具等。
Ekiga源碼編譯安裝過程:
1)下載源碼包:pwlib.tar.gz,opal.tar.gz,ekiga.tar.gz;
2)解壓:
tar –zxvf pwlib.tar.gz,
tar –zxvf opal.tar.gz,
tar –zxvf ekiga.tar.gz或者rar x ekiga.rar;
3)進入pwlib目錄cd pwlib,然后:
#./configure --prefix=/usr/local/pwlib && make && make install;
4)進入opal目錄cd opal,然后:
#./configure --prefix=/usr/local/opal && make && make install;
5)進入ekiga目錄cd ekiga,然后:
#./configure --prefix=/usr/local/ekiga-yun –with-pwlib-dir=/usr/local/pwlib/ --with-opal-dir=/usr/local/opal/ && make && make install。
源碼包安裝出錯大多缺少開發工具和開發庫,或者依賴庫的版本過低,需要升級?赡鼙緛硐到y中已經有了依賴的包,但找不到,這時候需要設置環境變量:#export PKG_CONFIG_PATH=usr/lib/pkgconfig。
配置的時候可能提示./configure權限不夠,那么在執行./configure之前要執行chmod +x configure。這是增加configure文件的可執行權限。
安裝完成之后調用Ekiga:#/usr/local/ekiga/bin/ekiga,要想直接執行#ekiga,則需要配置環境變量或者做鏈接:#ln –s /usr/local/ekiga/bin/ekiga /usr/bin/ekiga。
源碼安裝完成之后,在源碼包(因為編譯,源碼包增加了文件項)和—prefix指定的2個文件夾里都安裝了(后者是從前者復制過去的),所以從兩個地方都可以啟動Ekiga,而源碼包文件則是可以刪除的。
Ekiga卸載可以使用命令:rm -rf /usr/local/opal /usr/local/pwlib /usr/local/ekiga-yun。
從技術角度來描述,圖像(image)是指一幅單獨的、靜態的畫面;視頻(video)則是指一個連續的圖像序列。它們數字化后的信息量都十分巨大,必須采用先進的壓縮編碼算法將數字視頻、圖像進行大幅度壓縮。
作為一個聊天工具,Ekiga支持視頻的圖像數據傳輸率較高,占用信道帶寬較大,占用的數據存儲介質空間較多,為了解決以上問題,我們應盡量在圖像不失真或少失真的情況下,對圖像進行最大程度的壓縮。我們可以采用以下標準和方法進行壓縮。
1)H.261是最早出現的視頻編碼建議,目的是規范ISDN網上的會議電視和可視電話應用中的視頻編碼技術。它采用的算法結合了可減少時間冗余的幀間預測和可減少空間冗余的DCT變換的混合編碼方法。2)H.263建議的是低碼率圖像壓縮標準,在技術上是H.261的改進和擴充,支持碼率小于64kbit/s的應用。但實質上H.263以及后來的H.263+和H.263++已發展成支持全碼率應用的建議。3)H.264/MPEG-4 AVC全面應用視頻編碼理論的最新成果,與現有各種標準相比,在相同的視頻質量下,碼率減少一倍以上,這意味著在相同碼率下,視頻質量顯著提高?晒ぷ饔诙喾N速率,廣泛應用于視頻點播、可視游戲、數字電視與演播電視等,大有在上述領域一統天下的趨勢[3]。4)基于3-D DCT的XYZ視頻圖像壓縮編碼方法,提出了3-D DCT系數的三維Z形掃方案,大大提高了編碼效率。XYZ視頻圖像壓縮編碼方法不涉及運動估計和運動補償,復雜度低,能快速高質量地壓縮視頻圖像,是一種很有潛力的視頻編碼方法[4]。5)MEPG-IV主要解決在甚低速率(64kbps以內)通信線路上傳輸一定質量圖像的問題,同時實現多媒體信息的共同傳輸。主要用于移動通信和個人通信,可以拓展到目前的Internet上應用。
不同的視頻圖像壓縮編碼技術適用于不同的應用場合,最先進的技術不一定是最合適的技術。所以在選擇壓縮編碼方式時,應該根據自身的實際需要去確定。
5.2 數據網絡傳輸
數據傳輸速率是描述數據傳輸系統的重要技術指標之一。數據傳輸速率在數值上等于每秒種傳輸構成數據代碼的二進制比特數,單位為比特/秒(bit/second),記作bps。
要提高數據傳輸速率,應該選擇合適高效的網絡傳輸協議。Ekiga采用的是UDP傳輸協議,所以提高UDP的數據傳輸速率就可以從某種程度上提高Ekiga的性能。UDP的特點之一就是可以隨意丟棄數據包。UDP發送數據時,只是把數據放到這個socket的系統緩沖區里面就返回了,讓底層自主去發送。這樣如果服務器發送的速度太快,底層來不及發送,會導致這個系統緩沖區溢出,這樣后面的數據就丟失了。建議把系統緩沖區的大小設為0,這樣sendto函數將會確保把數據發送到網線上后才返回,客戶端的接受socket的緩沖區也可以設為0,這樣可以防止從系統緩沖區到用戶緩沖區的拷貝過程,效率會有明顯提高。
在高速數據傳輸網絡中,UDP協議有著其它數據傳輸協議無法比擬的優勢,但也存在著傳輸可靠性差的問題。對此有關研究人員設計出了一種新的可靠UDP協議(RUDP),大大提高了數據傳輸的可靠性,可以在高速網絡中非常有效地運行。RUDP在保證可靠性的前提下,在數據傳輸性能上特別是海量數據傳輸方面能夠取得很高的效率[5]。
內核是一個操作系統的核心。它負責管理系統的進程、內存、設備驅動程序、文件和網絡系統,決定著系統的性能和穩定性。如果用戶想定制一個更高效、更穩定的內核,就需要重新編譯內核。
為了正確地設置內核編譯配置選項,只編譯系統需要的功能的代碼。一般主要有下面四個考慮:
1)自己定制編譯的內核運行更快(具有更少的代碼);
2)系統將擁有更多的內存(內核部分將不會被交換到虛擬內存中);
3)不需要的功能編譯進入內核可能會增加被系統攻擊者利用的漏洞;
4)將某種功能編譯為模塊方式會比編譯到內核內的方式速度要慢一些。
avahi(零配置)、DBUS(數據控制組線)和SDL(全屏)組件是可選的,所以為了提高Ekiga運行性能可以將這些暫時用不著的功能模塊裁減掉。
Ekiga可優化之處如下。common.h:一些宏變量,如:#define GM_FRAME_SIZE 10;audio.cpp:void GMSound Event::Main(),void GMAudioRP::Main(),gfloat GMAudioRP::GetAverageSignalLevel(const short *buffer,int size),void GMAudioTester::Main();fakevideoinput.cpp:設置幀大小,無延遲獲取幀數據,等待完成前一個幀,獲取幀大小限制,獲取參數,設置視頻格式,設置顏色格式,設置幀分辨率;videoinput.cpp:設置顏色,設置亮度,設置潔白度,設置對比度,獲取參數;videooutput.h:獲取最大幀字節數;videooutput.cpp:設置幀數據,設置顏色格式;manager.cpp(endpoint.cpp):設置視頻媒體格式,設置端口(RTP端口、UDP端口、TCP端口),端點初始化,更新GUI,更新內部RTP統計,平均信號超時,RTP超時,網關IP超時,創建視頻輸出設備(其中的:顯示正在接收的視頻);通過#free命令來查看本軟件的優化效果。
優化前的內存占用:
圖5-1 優化前的內存占用
優化后的內存占用:
圖5-2 優化后的內存占用
6. 總結
本文分析了Ekiga的大體架構,了解了各模塊的調用關系及大體工作過程。掌握了Ekiga的編譯命令及過程,將其在龍芯PC上成功移植。針對Ekiga的工作原理,進行了一些創新性優化,如:圖像壓縮、裁減掉暫時不需要的功能模塊等,并提出了一些優化其性能的創新性建議,如:采用更好的圖像壓縮方法、采用更高效的傳輸協議以提高網絡數據傳輸效率、優化系統內核等。
[1] 袁萌.開源的價值與創新[J].信息系統工程,2006,(7):80-80.
[2] Cogley,Vince.Learning Linux[J].Smart Computing in Plain English,2007,18(6):46-46.
[3] 王之峰.視頻圖像壓縮編碼標準簡介[A].建設部,重慶市人民政府.2005中國重慶城市單軌交通國際高級論壇論文集[C],2005:365-368.
[4] 王秋華,章堅武.一種新的應用于可視電話的視頻壓縮編碼算法[A].中國航空學會等.2005中國控制與決策學術年會論文集[C],2005:1555-1558.
[5] 王繼剛,顧國昌,徐立峰,等.可靠UDP數據傳輸協議的研究與設計[J].計算機工程與應用,2006,42(15):113-116.09837