音視頻互動平臺--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連接策略。

?

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連接”。

?


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450134.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450134.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450134.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

pigz 壓縮

壓縮工具--pigz 壓縮: tar cvf - 目錄名 | pigz -9 -p 24 > file.tgz pigz:用法-9是壓縮比率比較大,-p是指定cpu的核數。 解壓: pigz -d file.tgz 這時候是tar包,那么在用 tar -xvf file.tar 解包。 速度比較gz.tar格式的壓縮…

exgcd模板

逆元模板P1082 1 #include <cstdio>2 #include <algorithm>3 4 int exgcd(int a, int b, int &x, int &y) {5 if(!b) {6 x 1;7 y 0;8 return a;9 } 10 int g exgcd(b, a % b, x, y); 11 std::swap(x, y); 12 …

有關eclipse for java ee版本遇到的坑( Context initialization failed)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 這幾天把以前網上看的視頻的源代碼拷貝到eclipse下面進行學習&#xff0c;當時用的是eclipse-jee-neon-M4a-win32-x86_64這個版本的ecli…

Android應用開發—TabLayout定制化Tab樣式

TabLayout的使用詳解基于此文&#xff0c;了解下setCustomView(childView)的使用。 TabLayout去掉指示器效果&#xff1a; app:tabIndicatorHeight"0dp"

即時通訊開發(逐行、隔行掃描)

早期的電視制式均采用隔行掃描&#xff0c;但是現在很多的高清、專業級的視頻采集卡都是采用逐行掃描模式&#xff0c;雖然現在的視頻設備和數字視頻技術已近有了很大的發展和進步&#xff0c;但是在時候中這兩種掃盲模式和顯示模式一直還存在&#xff0c;在前面我們介紹第四代…

ASP.NET Core 2.2 : 十六.扒一扒2.2版更新的新路由方案

ASP.NET Core 2.2 : 十六.扒一扒2.2版更新的新路由方案 原文:ASP.NET Core 2.2 : 十六.扒一扒2.2版更新的新路由方案ASP.NET Core 從2.2版本開始&#xff0c;采用了一個新的名為Endpoint的路由方案&#xff0c;與原來的方案在使用上差別不大&#xff0c;但從內部運行方式上來說…

ES6學習筆記

ES6學習筆記 在學習ES6的過程中做的一些記錄&#xff0c;用于未來的快速回憶。let&const 作用域的概念 ES6新增塊級作用域的概念&#xff08;一個大括號括起來的部分就是一個塊作用域&#xff09;let與const用于在塊級作用域中聲明變量&#xff0c;該變量僅在當前塊級作用域…

用jenkins創建節點

原料&#xff1a;(1)jre下載鏈接&#xff1a;https://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html (2)jdk:下載鏈接&#xff1a;https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 一、創建SLAVE節點…

統計git倉庫一些commit數據

基于git統計某個人的代碼提交行數 git log --author"xxx" --prettytformat: --since1.hour.ago --numstat | awk { add $1 ; subs $2 ; loc $1 - $2 } END { printf "added lines: %s removed lines : %s total lines: %s\n",add,subs,loc } - 統計倉…

JAXB: XML綁定的Java體系結構

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 用于XML綁定的Java體系結構&#xff08;JAXB&#xff09;是一種軟件框架&#xff0c;它允許Java開發人員將Java 類映射到XML表示。JAXB提…

解決 Script Error 的另類思路

2019獨角獸企業重金招聘Python工程師標準>>> 本文由小芭樂發表 前端的同學如果用 window.onerror 事件做過監控&#xff0c;應該知道&#xff0c;跨域的腳本會給出 "Script Error." 提示&#xff0c;拿不到具體的錯誤信息和堆棧信息。 這里讀者可以跟我一…

大平臺的局限

這篇文章算是二稿。初稿使的是慣用的賣弄筆法&#xff0c;寫到盡興時去查了查資料&#xff0c;哦草&#xff0c;錯了好多。悶悶不樂。后來就不敢再鬼扯&#xff0c;老老實實干巴巴地講觀點。 做產品的人都喜歡大平臺&#xff0c;好像男人都喜歡大胸脯女郎&#xff0c;但是胸脯大…

Lisenter筆記

EventListener與EventObject要完成在線用戶列表的監聽器&#xff0c;需要使用如下幾個接口&#xff1a;ServletContextListener接口&#xff1a;在上下文初始化時設置一個空的集合到application之中&#xff1b;HttpSessionAttributeListener接口&#xff1a;用戶增加session屬…

Android應用開發—重載fragment構造函數導致的lint errors

背景&#xff1a;在一次release打包中發現lint報以下錯誤&#xff1a; Error: Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArguments(Bundle) instead [ValidFragment] 根據后面的log提示是由于重載了fragment的構造函數&…

迅雷影音怎樣 1.5倍速度播放

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 看視頻 覺得播放速度太慢&#xff0c;想讓1.5速度播放可以這樣設置&#xff1a; 點擊快進按鈕&#xff0c;點一次變為1.1倍&#xff0c…

【Java】Mybatis mapper動態代理方式

前言 我們在使用Mybatis的時候&#xff0c;獲取需要執行的SQL語句的時候&#xff0c;都是通過調用xml文件來獲取&#xff0c;例如&#xff1a;User user (User) sqlSession.selectOne("cn.ddnd.www.Entity.User.getUser", "xue8qq.com");。這種方式是通過…

git pull時沖突的幾種解決方式

僅結合本人使用場景&#xff0c;方法可能不是最優的 1. 忽略本地修改&#xff0c;強制拉取遠程到本地 主要是項目中的文檔目錄&#xff0c;看的時候可能多了些標注&#xff0c;現在遠程文檔更新&#xff0c;本地的版本已無用&#xff0c;可以強拉 git fetch --allgit reset --h…

Android應用開發—eventBus發布事件和事件處理的時序關系

占坑&#xff0c;簡單說明下eventBus發布事件和事件處理的時序關系。 什么時候使用sticky&#xff1a; 當你希望你的事件不被馬上處理的時候&#xff0c;舉個栗子&#xff0c;比如說&#xff0c;在一個詳情頁點贊之后&#xff0c;產生一個VoteEvent&#xff0c;VoteEvent并不立…

grep命令 解說

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 grep&#xff08;global search regular expression(RE) and print out the line&#xff0c;全面搜索正則表達式并把行打印出來&#x…

創業第一桶金怎么來

文章摘要&#xff1a;資金是創業要具備的一個必要條件&#xff0c;那么對于創業者來說&#xff0c;第一桶金如何取得&#xff1f;資金是創業要具備的一個必要條件&#xff0c;那么對于創業者來說&#xff0c;第一桶金如何取得&#xff1f;   一、一門手藝   都說擁有萬貫…