壓縮包可以從這里獲得:http://anychat.storage.aliyun.com/AnyChatCoreSDK_Win32(MBCS)_V4.5.zip
下載后,首先將其解壓到一個臨時文件夾中,然后開始后續工作。
?
編譯后我們獲得的是.lib文件。
?
??????? AnyChat SDK向上層應用開放了內核的P2P連接策略,可以讓應用程序來干預內核的P2P連接,以滿足各種場合下的應用需求。
?
設置P2P連接策略的典型代碼如下:
1.DWORD dwP2PPolitic = 3;
2.BRAC_SetSDKOption(BRAC_SO_NETWORK_P2PPOLITIC,(const char*)&dwP2PPolitic,sizeof(DWORD));
目前開放的P2P連接策略包含如下值:
- 0 禁止P2P連接,不主動與其它用戶建立P2P連接,也不接受其它用戶發起的P2P連接請求;
- 1 服務器控制P2P[默認],自動與當前房間內的所有用戶建立P2P;
- 2 上層應用控制P2P連接,不主動與其它用戶建立P2P連接,但可接受其它用戶發起的P2P連接請求,但應用程序可以下達與指定用戶建立P2P連接的指令,收到上層應用的指令后,再嘗試與該用戶建立P2P連接;
- 3 按需建立P2P連接,在需要建立P2P連接時(如請求對方的音頻、視頻數據),便自動嘗試與該用戶建立P2P連接,也自動接受其它用戶的P2P連接請求;
?
P2P連接建立成功,或是斷時,會通過P2P狀態變化消息通知上層應用。
?
由于每個客戶端的P2P連接資源是有限的(每個客戶端最多可與30個用戶建立P2P連接),所以不同的應用環境,需要設置不同的P2P連接策略。
?
AnyChat SDK默認是“服務器控制P2P”策略,用戶進入房間后,將主動與房間內的所有用戶建立P2P,該模式適用于同一個房間不超過50個用戶(考慮到與部分客戶端的P2P連接可能建立不成功)的應用,如果同一個房間的用戶數較多,建議上層應用使用“上層應用控制P2P連接”或是“按需建立P2P連接”模式,使得客戶端可以與需要的用戶建立P2P,而不至于出現P2P連接資源被無關的用戶占用的情況。
?P2P連接策略可以初始化成功之后動態調整,但只有“禁止P2P連接”模式被設置后,會斷開與其它用戶的P2P連接,設置其它的模式,均不會斷開現有P2P連接。當客戶端設置為“禁止P2P連接”策略后,所有的音頻、視頻數據(包括自己傳給其它用戶,其它用戶傳給自己)都將通過服務器中轉,可適用于某些特殊的應用場合。
?
在所有P2P連接策略中,最優的策略是“按需建立P2P連接”,但沒有將其作為SDK的默認P2P連接策略,主要是該策略是新增,而為了兼容老版本的SDK,便將“服務器控制P2P”策略設置為默認連接策略。
?
當設置為“上層應用控制P2P連接”之后,便可以通過SDK提供的接口主動與指定的用戶建立P2P連接,典型代碼如下:
1.DWORD dwTargetUserId = 100;
?
?2.BRAC_SetSDKOption(BRAC_SO_NETWORK_P2PCONNECT,(const char*)&dwTargetUserId,sizeof(DWORD));
?
?
我們建議一個應用平臺上,均采用相同的P2P連接策略,否則可能出現特殊情況,例如:A用
戶采用“上層應用控制P2P連接”策略,B用戶采用“服務器控制P2P”策略,兩個用戶進入房間后,雖然上層應用沒有向A用戶下達與B用戶建立P2P連接的請求,但實際上A、B兩用戶之間仍然會建立P2P連接,因為B用戶會主動與A用戶建立連接。
?
注:上述所有“建立P2P連接”并不代表P2P連接一定能建立成功,這與實際的網絡狀態相關,只是表示“嘗試與對方建立P2P連接”。
?