自研視頻會議庫XNet介紹 (不使用webrtc sip等,實現視頻會議,音視頻通話,連麥,對講等)

實現視頻會議有很多方案,比如現在比較流行的webrtc(服務端結合coturn和licode), 還有sip協議相關的開源方案,服務端freeswitch或者opensips,客戶端linphone,pjsip等,都可以很容易實現音視頻通話系統。linphone本身是個成品軟件,app應用商店上就能下載,很多人在其基礎上改一下界面,做成自己的產品。像webrtc,freeswitch這種,確實做的不錯,但實現也比較複雜,沒有一些技術功底,並且對其代碼很熟悉的話,不容易針對業務進行修改,做成視頻會議更是困難。 使用開源代碼,如果代碼更新了,自己的代碼也得隨之更新,業務邏輯就得隨之更改,比較麻煩。
之前和朋友一起搞過一個視頻通話項目,也借鑑了一些開源實現,寫了一個網絡庫XNet,使用簡單方便,自己可以自由修改擴展,不需要的東西也可以去掉,比如音視頻編解碼只支持h264和opus,其他編解碼庫看需求添加。網絡庫是純c++實現,只包括網絡傳輸模塊,加入了jitterbuffer,qos控制等。上層用c++寫相關業務邏輯,實現服務器和客戶端。cmake編譯各個平臺庫。各個平臺單獨搞音視頻採集和編解碼,可以針對系統進行優化,當成庫給第三方集成的話佔空間也比較小,開源的那些庫一般包含的東西很多,所以佔空間比較大,自己寫的庫也不會有庫衝突的問題,例如有些視頻app繼承了很多第三方的cdn庫,有些cdn庫又用了相同的開源庫(例如libevent,libev,ffmpeg等),版本卻不一樣,這樣就會出現崩潰或者很多莫名其妙的問題。XNet 內部沒有使用任何開源庫,基於socket使用select,poll,epoll跨平臺實現高併發異步模型,音視頻傳輸使用udp並進行了qos優化。此庫適用於不用第三方sdk,自研視頻會議,實時音視頻通話,連麥等的開發人員 demo地址如下:
XNet服務端demo代碼地址,
iOS端XNet demo代碼地址
安卓XNet demo端代碼地址
另外 開源代碼裏邊對底層採集播放等內容封裝的比較厲害,新手短時間內不容易看明白。在我的另外一篇博客已經講過了iOS rtmp 攝像頭/錄屏直播以及觀看
。想了解iOS 底層的音視頻採集播放等在視頻通話中的具體實現。 也可以看一下上邊的XNet iOS端demo。視頻通話和直播的區別,主要在音頻採集和播放方面。iOS 通話主要使用AudioUnit,效率和功能更多一些。AudioUnit提供了降噪(kAudioUnitSubType_VoiceProcessingIO),混音(kAudioUnitSubType_MultiChannelMixer)接口,具體還需注意採樣率音頻格式等, 安卓降噪採用了webrtc相關技術,可以參考上述代碼。
目前服務器端網絡庫提供了mac和Linux版本,提供給大家使用。大家只需要下載下來用xcode運行,或者cmake編譯運行都可以。c++網絡編程,音視頻等方面如有問題探討,歡迎聯繫qq(592979271),一起探討。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章