音視頻互動平臺--P2P通信技術

     壓縮包可以從這裏獲得: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連接策略。
 
我們建議一個應用平臺上,均採用相同的P2P連接策略,否則可能出現特殊情況,例如:A用戶採用“上層應用控制P2P連接”策略,B用戶採用“服務器控制P2P”策略,兩個用戶進入房間後,雖然上層應用沒有向A用戶下達與B用戶建立P2P連接的請求,但實際上A、B兩用戶之間仍然會建立P2P連接,因爲B用戶會主動與A用戶建立連接。
 
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連接”並不代表P2P連接一定能建立成功,這與實際的網絡狀態相關,只是表示“嘗試與對方建立P2P連接”。
  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章