手把手教你搭建音視頻通信系統——Windows版本

這是《手把手教你搭建音視頻通信系統》系列的最后一篇了,今天簡單聊聊如何在Windows版本上搭建音視頻通信,下個系列你想了解有關圖像處理或音視頻開發的什么內容呢?歡迎在評論區給圖鴨君留言,說不定下一篇就是你期待已久的技術干貨嘍!

一、準備:

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及由圖鴨科技公司開源的轉發服務器代碼(www.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:結束音視頻采集和渲染以及傳輸


三、效果展示

1、自己登陸ID為1,添加節點為2,但2未上線的情況

可以看到本地視頻回路已被打開,控制臺打印信息主要有:

login success:表示登陸轉發服務器成功

add node 2:表示添加節點2

get p2p addr of uid:2 fail:是在請求添加2節點,但是2節點還沒有上線


2、本地ID為1,添加節點2,且節點2已上線

usr1本地窗口
usr2窗口

達到上圖所示結果,就完成了Windows端的音視頻通信。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。