在視頻會(huì)議軟件的開發(fā)當(dāng)中,由于需要傳輸一些音、視頻等實(shí)時(shí)性非常強(qiáng)的數(shù)據(jù),這些數(shù)據(jù)相對(duì)于一般的文本數(shù)據(jù),顯得非常巨大,因此我們?cè)谝曨l會(huì)議軟件開發(fā)當(dāng)中最重要的是解決如何傳輸實(shí)時(shí)、大容量數(shù)據(jù)的問題。由此可見選擇一個(gè)合適的數(shù)據(jù)傳輸庫對(duì)我們開發(fā)來說非常關(guān)鍵。而在視頻會(huì)議軟件的開發(fā)過程中,供我們選擇的數(shù)據(jù)傳輸庫非常多,我們?cè)谶@里主要對(duì)用于視頻會(huì)議軟件開發(fā)的開源數(shù)據(jù)傳輸庫,進(jìn)行一個(gè)評(píng)測(jrtplib、UDT、Raknet),主要從實(shí)時(shí)性、傳輸效率、調(diào)用復(fù)雜度、可靠性、大數(shù)據(jù)、跨平臺(tái)性這幾個(gè)方面進(jìn)行一個(gè)全面的對(duì)比。
1、jrtplib庫 (總體 :★★★★☆)
jrtplib庫是應(yīng)用最廣的RTP傳輸庫,其主要是通過UDP協(xié)議封裝RTP數(shù)據(jù)包來實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)傳輸,由于RTP協(xié)議是通過時(shí)間戳來實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)傳輸,因此jrtplib在視頻會(huì)議軟件開發(fā)當(dāng)中,通??梢詡鬏斠?、視頻等實(shí)時(shí)的數(shù)據(jù)。除此之外,jrtplib庫可以在 Windows、Linux、 FreeBSD、Solaris、Unix和VxWorks 等多種操作系統(tǒng)上運(yùn)行。
項(xiàng)目地址:http://research.edm.uhasselt.be/jori/jrtplib/documentation/index.html
實(shí)時(shí)性 (★★★★★):由于采用UDP的數(shù)據(jù)傳輸而且沒有進(jìn)行相應(yīng)重發(fā)等操作,因此其實(shí)時(shí)性非常高。
傳輸效率(★★★★★):jrtplib算法簡單,因此占用cpu非常小
調(diào)用復(fù)雜度(★★★☆☆):jrtplib依賴其他的庫,因此編譯起來比較困難,但使用較為方便。
可靠性(★☆☆☆☆):jrtplib庫只在UDP上面進(jìn)行了RTP數(shù)據(jù)包封裝,沒有進(jìn)行可靠性控制,因此可靠性不能保證。
大數(shù)據(jù)(★★★★☆):jrtplib在傳輸大數(shù)據(jù)的時(shí)候,需要把大的數(shù)據(jù)進(jìn)行分包,其每個(gè)包的大小都不能超過RTP設(shè)定的最大包的大小。
跨平臺(tái)性(★★★★★):jrtplib跨平臺(tái)性較高,可以在多種操作系統(tǒng)上運(yùn)行。
2、UDT庫(總體 :★★★☆☆)
UDT庫是一個(gè)非常著名的RUDP庫(可靠的UDP庫),其主要通過重發(fā)來實(shí)現(xiàn)UDP數(shù)據(jù)的可靠性,既可以保持?jǐn)?shù)據(jù)的實(shí)時(shí)傳輸,也可以達(dá)到可靠的數(shù)據(jù)傳輸。在視頻會(huì)議軟件開發(fā)當(dāng)中,可以傳輸一些信令或者實(shí)時(shí)性比較高的控制信息等。
項(xiàng)目地址:http://sourceforge.net/p/udt/discussion/852996
實(shí)時(shí)性(★★★★☆):由于采用UDP的數(shù)據(jù)傳輸,而且采用了重發(fā)等可靠的傳輸操作,因此其實(shí)時(shí)性比用jrtplib傳輸要低,但比直接采用TCP要高。
傳輸效率(★★★☆☆):UDT的滑動(dòng)窗口算法比較復(fù)雜,占用cpu有點(diǎn)高。
調(diào)用復(fù)雜度(★★★☆☆):UDT調(diào)用較為簡單,但沒有分包算法,要自己進(jìn)行分包處理,因此使用起來比較困難。
可靠性(★★★★★):由于UDT是進(jìn)行可靠的驗(yàn)證,因此數(shù)據(jù)能保證可靠。
大數(shù)據(jù)(★★★☆☆):UDT在傳輸大數(shù)據(jù)的時(shí)候,同樣需要把大數(shù)據(jù)進(jìn)行分包進(jìn)行傳輸,其每個(gè)包的大小不能超過UDT設(shè)定的最大包大小。
跨平臺(tái)性(★★★★☆):UDT也能進(jìn)行跨平臺(tái)性編譯,但最新版本在ios編譯會(huì)出現(xiàn)錯(cuò)誤。
3、Raknet(總體 :★★★★☆)
Raknet本來是一個(gè)游戲引擎,同時(shí)它也是一個(gè)非常優(yōu)秀的RUDP傳輸庫,在游戲領(lǐng)域擁有眾多的開發(fā)者用戶,而在視頻會(huì)議軟件開發(fā)當(dāng)中,我們也可以利用這個(gè)優(yōu)秀的游戲引擎來傳輸實(shí)時(shí)可靠的數(shù)據(jù)。Raknet傳輸庫可以在非商業(yè)用途上開源,但在商業(yè)應(yīng)用中收費(fèi),但我們一般項(xiàng)目還是可以直接使用它,它可以編譯成靜態(tài)庫,因此Raknet也是一個(gè)不錯(cuò)的選擇。
項(xiàng)目地址:http://www.jenkinssoftware.com
實(shí)時(shí)性(★★★☆☆):Raknet采用單線程的RUDP進(jìn)行數(shù)據(jù)傳輸,因此其實(shí)時(shí)性要比jrtplib和UDT都要低一些。
傳輸效率(★★★★☆):Raknet由于采用單線程的接收方式,因此效率比jrtplib要高,CPU占用也較小。
調(diào)用復(fù)雜度(★★★★★):Raknet調(diào)用較為簡單,而其帶有分包功能,不用自己進(jìn)行分包操作,因此使用起來比較方便。
可靠性(★★★★★):由于Raknet通過重發(fā)和校驗(yàn)來保持?jǐn)?shù)據(jù)的實(shí)時(shí)性,因此數(shù)據(jù)能保持可靠性。
大數(shù)據(jù)(★★★★☆):Raknet不需要進(jìn)行分包操作,但由于其采用單線程設(shè)計(jì),因此當(dāng)網(wǎng)絡(luò)堵塞的情況下,數(shù)據(jù)會(huì)重發(fā),導(dǎo)致數(shù)據(jù)更加堵塞。
跨平臺(tái)性(★★★★★):Raknet支持多系統(tǒng)的編譯,跨平臺(tái)性非常好。