視頻通信系統是我們在日常生活中經常使用的,大家有沒有想過搭建一套屬於自己的視頻通信系統呢?今天就來和大家介紹介紹兩款免費 windows 版視頻通信系統 SDK 的搭建。
Webrtc
Webrtc(webrtc.org)的編譯對於開發主機的性能,網絡帶寬的要求都非常高。另外,在Windows 平臺下,它對 Windows 的系統版本,Visual Studio 版本也都有明確的要求,只要其中某一項出問題了,都可能導致失敗。因此在準備環節需要確定主機和系統配置
一、準備
1、要求
1)安裝好 VPN,確保網絡順暢
2)64 位機器、8G 及以上內存、100G 及以上磁盤空間、NTFS 格式;
3)安裝 Visual Studio 2015 Update 3
4)操作系統:Windows 7 及以上的英文版本(注意windows只能是英文版本)
2、下載 depot-tools
注意設定好解壓文件夾,要不當前文件夾會文件太多弄混。
3、配置 depot-tools 環境變量
計算機——屬性——高級——環境變量——path
注意:必須將它放在 path 環境變量的開頭
4、將 depot-tools 配置到系統環境變量裏
depot_tools 使用 Google 內部版本。
二、下載源碼
創建webrtc目錄:
mkdir webrtc-checkout
cd webrtc-checkout
fetch --nohooks webrtc
你可以選擇的目錄:
git config branch.autosetupmerge always
git config branch.autosetuprebase always
或者創建新的目錄:
cd src
git checkout master
git new-branch your-branch-name
gclient sync
三、編譯
1、獲取 Ninja 工程文件:
Ninja 是 Chromium 社區開發的一套 build system,非常適合 webrtc
2、執行下面的命令進行 Webrtc 編譯 cd src
gn gen out/Default
編譯成功後,執行下面的命令生成 vs 工程文件
gn gen--ide=vs out\Default
這時,我們就可以在 src\out\Default\ 目錄下找到 all.sln 這個工程文件。因爲 webrtc 的文檔很多,強烈建議大家上 webrtc 的官網,根據官網的步驟一步一步操作,不要着急。 https://webrtc.org/native-code/development/
說完 webrtc 的方案,接下來我們看看 tucodec
Tucodec
一、準備:
1、首先在圖鴨官網:http://tucodec.com 進行註冊,獲得 SDK 中所需要的 APPKey、AppSecret,註冊登錄後如下圖所示:
圖1 註冊後獲取AppKey、AppSecret
點擊 SDK 下載按鈕跳轉到下載界面,選擇下載 Windows 中所需 SDK 和 Demo。
圖2 SDK下載展示
如圖所示我們提供了 vs2013 版本和 vs2015 版本的 SDK 及相應的 WinDemo。
圖3 SDK解壓後內容
2、下載 visual studio 開發工具並安裝,因爲 vs2013 和 vs2015 自帶的一些庫和編譯選項有些許不同,所以必須選擇與 SDK 匹配的 vs工具進行開發。
3、安裝完成後雙擊打開圖3中的 WinDemo.sln,便可以看到如圖4的工程界面,把生成類型調整爲 Debug/x86,然後編譯 WinDemo 項目。
圖4 WinDemo項目截圖
4、在 vs 中點擊“本地調試器”即可運行本 demo,main 函數的兩個參數已在工程配置選項中賦予,如圖5所示
圖5 項目裏的main參數設置
或者手動將 opencv 和 Tucodec_SDK_Windows 的 bin 目錄下的文件拷貝到 exe 所在的目錄。然後在該文件夾下打開“命令提示符”或者“Windows PowerShell”,在命令行下面賦予 WinDemo.exe 兩個參數,分別是自己的 ID 和對方的 ID,然後運行即可。如圖6所示
圖6 在命令行中打開WinDemo.exe,效果和上面一樣
5、SDK相關說明在《Windows端VoIP SDK使用說明》一文,已經做了詳細介紹,本文接下來主要介紹 WinDemo 的代碼結構,方便開發者理清開發流程。
二、WinDemo介紹
總的來說,Windows 端的音視頻通信系統主要包括音視頻採集、音視頻播放和 VoIP 負責的音視頻傳輸三個模塊。利用圖鴨科技提供的 SDK 及由圖鴨科技公司開源的轉發服務器代碼(tucodec.com),開發者可以搭建自己的音視頻通信服務器。因此,開發者主要面對的問題就是 Windows 端的音視頻採集與播放問題,也是本文着重介紹的地方。
1、視頻採集和播放
有經驗的開發者看到壓縮包內的 opencv 目錄便知道了在本 Demo 中對視頻的處理藉助了 opencv 的幫助,其優點是可以非常方便的進行視頻採集和播放,爲開發者屏蔽了與 Windows 硬件交互的諸多繁雜任務。Demo 中的 CVideoCap 和 CVideoRender 兩個類就是利用了 opencv 庫進行視頻的採集和渲染。
當然,opencv 有一個比較大的缺點兒就是耗費系統資源比較多,如果電腦配置一般的話會發現開啓 opencv 渲染視頻後電腦的 CPU 負荷會出現大幅上漲。所以如果想把我們的 SDK 用於產品研發的話,推薦自己實現客戶端的採集和播放功能,常用的有 DirectShow,SDL,DirectX SDK 等官方提供的 SDK。
2、音頻採集和播放
由於 opencv 不能完成音頻相關的處理任務,所以 Demo 中使用了微軟提供的 Windows MultiMedia 相關 API 完成音頻採集和渲染功能,詳見 Demo 中的 CAudioCap 和 CAudioRender 兩個類。
音視頻採集與播放的類關係如下圖所示:
圖7 音視頻採集和播放的UML類圖
3、CVoipManager 類
這個類封裝了音視頻操作與 VoIP 之間的交互,是整個 Demo 的核心部分。其類圖如下所示:
圖8 CVoIPManager類圖
部分方法和屬性介紹:
m_clientNetwork:ClientNetwork 實例,負責轉發服務器的登錄
m_voip:TYVoip 實例,負責打通數據傳輸
m_voipCallback:TYVoip 中的接口實現,是 voip 的視頻回調接口,客戶端從這個類中獲得voip 傳過來的視頻數據
m_selfID:本地的 usrID
m_sessionID:會話 ID
m_audioCap,m_audioRender,m_videoCap,m_videoRender:音視頻採集渲染
m_ac,m_ai,m_vc,m_vi:音視頻格式配置
m_nodeList:添加的通信節點列表
LoginServer:登錄轉發服務器(轉發服務器需要提前配置好),因爲是通過轉發服務器做數據傳輸或 P2P 打洞,所以在添加對方爲節點的時候要保證兩者都是在線狀態,當然這個在登錄模塊做了處理,如果對方還沒上線會一直請求下去。
AddNote:添加一個通信節點
RemoveNote:移除一個通信節點
StartVoipTransmit:開始音視頻採集和渲染以及傳輸
EndVoipTransmit:結束音視頻採集和渲染以及傳輸
總結
webrtc 被越來越多的團隊使用,但是其幾 G 的源代碼也是讓人頭疼,建議大家可以上 github 上搜索其他團隊給出的編譯結果,有精力的朋友最好還是選擇自己上官網下載、編譯,畢竟搜索出來的信息相對都比較陳舊。 tucodec 作爲纔出來沒多久的產品,其文檔的不夠豐富,也增加了一些編譯難度,建議編譯的朋友,可以加他們的羣,這樣如果在編譯時遇到問題,可以直接詢問。