轉自:連接java
要作一個移動端視頻通話軟件,大體看了下現有的開源軟件一) sipdroid1)架構sip協議棧使用JAVA實現,音頻Codec使用skype的silk(Silk編解碼是Skype向第三方開發人員和硬件製造商提供免版稅認證(RF)的Silk寬帶音頻編碼器)實現。NAT傳輸支持stun server.2)優缺點:NAT方面只支持STUN,無ICE框架,如須要徹底實現P2P視頻通話須要實現符合ICE標準的客戶端,音頻方面沒看到AEC等技術,視頻方面還不是太完善,目前只看到調用的是系統自帶的MediaRecorder,並無本身的第三方音視頻編解碼庫。3)實際測試:基於sipdroid架構的話,咱們要作的工做會比較多,(ICE支持,添加回音消除,NetEQ等gips音頻技術,添加視頻硬件編解碼codec.),因此就不作測試了。二) imsdroid1)架構:基於doubango(Doubango 是一個基於3GPP IMS/RCS 並能用於嵌入式和桌面系統的開源框架。該框架使用ANSCI-C編寫,具備很好的可移植性。而且已經被設計成很是輕便且能有效的工做在低內存和低處理能力的嵌入式系統上。蘋果系統上的idoubs功能就是基於此框架編寫) .音視頻編碼格式大部分都支持(H264(video),VP8(video),iLBC(audio),PCMA,PCMU,G722,G729)。NAT支持ICE(stun+turn)2)效果實測測試環境:公司局域網內兩臺機器互通,服務器走外網sip2sip音頻質量能夠,可是AEC打開了仍是有點回音(應該能夠修復)。視頻馬賽克比較嚴重,延遲1秒左右。3)優缺點imsdroid目前來講仍是算比較全面的,包括音視頻編解碼,傳輸(RTSP,ICE),音頻處理技術等都有涉獵。doubango使用了webrtc的AEC技術,可是其調用webrtc部分沒有開源,是用的編譯出來的webrtc的庫。若是要改善音頻的話不太方便,Demo的音頻效果能夠,視頻效果仍是不太理想。三)csipsimple1)sip協議棧用的是pjsip,音視頻編解碼用到的第三方庫有ffmpeg(video),silk(audio),webrtc.默認使用了webrtc的回聲算法。支持ICE協議。2)優缺點:csipsimple架構比較清晰,sip協議由C實現,java經過JNI調用,SIP協議這一塊會比較高效。其VOIP各個功能也都具有,包括NAT傳輸,音視頻編解碼。而且該項目跟進新技術比較快,官方活躍程度也比較高。若是作二次開發能夠推薦這個。3)實測效果測試環境:公司局域網內兩臺機器互通,服務器走外網sip2sip音頻質量能夠,無明顯迴音,視頻須要下插件,馬賽克比imsdroid更嚴重。四)Linphone這個是老牌的sip,支持平臺普遍 windows, mac,ios,android,linux,技術會比較成熟。可是據玩過的同事說linphone在Android上的bug有點多,因爲其代碼實在龐大,因此我暫時放棄考慮Linphone.不過若是誰有跨平臺的須要,能夠考慮Linphone或者imsdroid和下面的webrtc.。。。好像如今開源軟件都跨平臺了。。。五) webrtcimsdroid,csipsimple,linphone都想法設法調用webrtc的音頻技術,本人也測試過Android端的webrtc內網視頻通話,效果比較滿意。可是要把webrtc作成一個移動端的IM軟件的話還有一些路要走,不過webrtc基本技術都已經有了,包括p2p傳輸,音視頻codec,音頻處理技術。不過其由於目前僅支持VP8的視頻編碼格式(QQ也是)想作高清視頻通話的要注意了。VP8在移動端的硬件編解碼支持的平臺沒幾個(RK能夠支持VP8硬件編解碼)。不過webrtc代碼裏看到可使用外部codec,這個仍是有但願調到H264的。總結:sipdroid比較輕量級,着重基於java開發(音頻codec除外),因爲其音視頻編碼以及P2P傳輸這一塊略顯不足,不太好作定製化開發和優化。imsdroid,遺憾就是直接調用webrtc的庫,而最近webrtc更新的比較頻繁,開發比較活躍。若是要本身在imsdroid上更新webrtc擔憂兼容性問題,但願imsdroid能夠直接把須要的webrtc相關源碼包進去。csipsimple的話,都是圍繞pjsip的,webrtc等都是以pjsip插件形式擴充的,相似gstreamer. webrtc若是有技術實力的開發公司我的仍是以爲能夠選擇這個來作,一個是google的緣由,一個是其視頻通話相關關鍵技術都比較成熟的緣由。我的以爲若是能作出來,效果會不錯的。