前兩天說了iOS介紹了Android,今天就和你們說一下windows端如何搭建視頻通訊系統。node
1、準備:windows
一、首先在圖鴨官網:http://tucodec.com 進行註冊,得到SDK中所須要的APPKey、AppSecret,註冊登陸後以下圖所示:服務器
圖1 註冊後獲取AppKey、AppSecret
點擊SDK下載按鈕跳轉到下載界面,選擇下載Windows中所需SDK和Demo。session
圖2 SDK下載展現
如圖所示咱們提供了vs2013版本和vs2015版本的SDK及相應的WinDemo。ide
圖3 SDK解壓後內容函數
二、下載visual studio開發工具並安裝,由於vs2013和vs2015自帶的一些庫和編譯選項有些許不一樣,因此必須選擇與SDK匹配的VS工具進行開發。工具
三、安裝完成後雙擊打開圖3中的WinDemo.sln,即可以看到如圖4的工程界面,把生成類型調整爲Debug/x86,而後編譯WinDemo項目。開發工具
圖4 WinDemo項目截圖ui
四、在vs中點擊「本地調試器」便可運行本demo,main函數的兩個參數已在工程配置選項中賦予,如圖5所示命令行
圖5 項目裏的main參數設置
或者手動將opencv和Tucodec_SDK_Windows的bin目錄下的文件拷貝到exe所在的目錄。而後在該文件夾下打開「命令提示符」或者「Windows PowerShell」,在命令行下面賦予WinDemo.exe兩個參數,分別是本身的ID和對方的ID,而後運行便可。如圖6所示
圖6 在命令行中打開WinDemo.exe,效果和上面同樣
五、SDK相關說明在《Windows端VoIP SDK使用說明》一文,已經作了詳細介紹,本文接下來主要介紹WinDemo的代碼結構,方便開發者理清開發流程。
2、WinDemo介紹
總的來講,Windows端的音視頻通訊系統主要包括音視頻採集、音視頻播放和VoIP負責的音視頻傳輸三個模塊。利用圖鴨科技提供的SDK及由圖鴨科技公司開源的轉發服務器代碼(http://www.tucodec.com),開發者能夠搭建本身的音視頻通訊服務器。所以,開發者主要面對的問題就是Windows端的音視頻採集與播放問題,也是本文着重介紹的地方。
一、視頻採集和播放
有經驗的開發者看到壓縮包內的opencv目錄便知道了在本Demo中對視頻的處理藉助了opencv的幫助,其優勢是能夠很是方便的進行視頻採集和播放,爲開發者屏蔽了與Windows硬件交互的諸多繁雜任務。Demo中的CVideoCap和CVideoRender兩個類就是利用了opencv庫進行視頻的採集和渲染。
固然,opencv有一個比較大的缺點兒就是耗費系統資源比較多,若是電腦配置通常的話會發現開啓opencv渲染視頻後電腦的CPU負荷會出現大幅上漲。因此若是想把咱們的SDK用於產品研發的話,推薦本身實現客戶端的採集和播放功能,經常使用的有DirectShow,SDL,DirectX SDK等官方提供的SDK。
二、音頻採集和播放
因爲opencv不能完成音頻相關的處理任務,因此Demo中使用了微軟提供的Windows MultiMedia相關API完成音頻採集和渲染功能,詳見Demo中的CAudioCap和CAudioRender兩個類。
音視頻採集與播放的類關係以下圖所示:
圖7 音視頻採集和播放的UML類圖
三、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:結束音視頻採集和渲染以及傳輸
3、效果展現
一、本身登錄ID爲1,添加節點爲2,但2未上線的狀況
能夠看到本地視頻迴路已被打開,控制檯打印信息主要有:
login success:表示登錄轉發服務器成功
add node 2:表示添加節點2
get p2p addr of uid:2 fail:是在請求添加2節點,可是2節點尚未上線
二、本地ID爲1,添加節點2,且節點2已上線
usr1本地窗口
usr2窗口
達到上圖所示結果,就完成了Windows端的音視頻通訊。