jrtplib V3 11 1 收包流程

2021-08-03 16:18:41 字數 1495 閱讀 6669

最近在看 jrtplib的收包流程,看了這篇文章 jrtplib接收資料報流程 ,只是用的庫老了點 v3.7 的,寫的也太長了,不夠簡練,於是自己寫乙份

v3.11.1的簡練點的收包流程說明,撿重點,無關的流程略過。

rtp包的接收入口函式

int rtpsession::poll()

————————————— 流程(一) 的剖析  ————————————–

說明: rtptrans是rtpsession類的成員變數,預設是rtpudpv4transmitter類,它實現了rtp包以及rtcp包的收發工作

步驟1,分別從 rtpsock 和 rtcpsock 收資料

int rtpudpv4transmitter::poll()

}步驟2

int rtpudpv4transmitter::pollsocket(bool rtp)

————————————— 流程(二) 的剖析  ————————————–

步驟1int rtpsession::processpolleddata()

// 下面是傳送rtcp相關的,沒研究過

status = rtcpbuilder.buildnextpacket(&pack)

status=rtptrans->sendrtcpdata(pack->getcompoundpacketdata(),pack->getcompoundpacketlength()) //傳送rtcp包

}步驟2,內部解析元資料,判斷是rtp還是rtcp包,然後分別處理

int rtpsources::processrawpacket(rtprawpacket *rawpack )

// 步驟2.2.3, 內部迴圈處理csrc陣列,沒研究過

for (i = 0 ; i < num ; i++)

}ok,到此rtpsession收rtp包後存入佇列,收包流程就結束了,接下來就是處理這些收到的包了,官方示例如下:

sess.begindataaccess(); //同步鎖

// check incoming packets

// 開始遍歷參與者中第乙個有rtp資料的流,如果找到了,就返回tree,否則返回false。

//在接收資料時我們常用的是這套函式,因為如果沒有資料要來都沒用 

if (sess.gotofirstsourcewithdata())   

;memcpy(pbuffer,pack->getpayloaddata(),pack->getpayloadlength());

printf("got packet -->%s \n",pbuffer); // 介面列印收到的字串

// we don't longer need the packet, so

// we'll delete it

sess.deletepacket(pack);

}} while (sess.gotonextsourcewithdata());

}sess.enddataaccess();  

3 11隨機選擇

問題 你想從乙個序列中隨機抽取若干元素,或者想生成幾個隨機數。解決方案 random模組有大量的函式用來生產隨機數和隨機選擇元素。比如,想要從乙個序列中隨機的抽取乙個元素,可以使用random.choice import random values 1,2,3,4,5,6 print random....

完全揹包 311

時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述直接說題意,完全揹包定義有n種物品和乙個容量為v的揹包,每種物品都有無限件可用。第i種物品的體積是c,價值是w。求解將哪些物品裝入揹包可使這些物品的體積總和不超過揹包容量,且價值總和最大。本題要求是揹包恰好裝滿揹包時,求出最大價值...

實驗3 11 計算油費

實驗3 11 計算油費 15分 現在90號汽油6.95元 公升 93號汽油7.44元 公升 97號汽油7.93元 公升。為吸引顧客,某自動加油站推出了 自助服務 和 協助服務 兩個服務等級,分別可得到5 和3 的折扣。本題要求編寫程式,根據輸入顧客的加油量a,汽油品種b 90 93或97 和服務型別...