JRTP 程式設計模型

2021-08-25 15:34:23 字數 1900 閱讀 8263

1) 初始化

在使用 jrtplib 進行實時流**資料傳輸之前,首先應該生成 rtpsession 類的乙個例項來表示此次 rtp 會話,然後呼叫 create() 方法來對其進行初始化操作。 rtpsession 類的 create() 方法只有乙個引數,用來指明此次 rtp 會話所採用的埠號。

2) 資料傳送

當 rtp 會話成功建立起來之後,接下來就可以開始進行流**資料的實時傳輸了。首先需要設定好資料傳送的目標位址, rtp 協議允許同一會話存在多個目標位址,這可以通過呼叫 rtpsession 類的 adddestination() 、 deletedestination() 和 cleardestinations() 方法來完成。目標位址全部指定之後,接著就可以呼叫 rtpsession 類的 sendpacket() 方法,向所有的目標位址傳送流**資料。 sendpacket() 最典型的用法是類似於下面的語句,其中第乙個引數是要被傳送的資料,而第二個引數則指明將要傳送資料的長度,再往後依次是 rtp 負載型別、標識和時戳增量。

sess.sendpacket(buffer, 5, 0, false, 10);

對於同乙個 rtp 會話來講,負載型別、標識和時戳增量通常來講都是相同的, jrtplib 允許將它們設定為會話的預設引數,這是通過呼叫 rtpsession 類的 setdefaultpayloadtype() 、 setdefaultmark() 和 setdefaulttimestampincrement() 方法來完成的。為 rtp 會話設定這些預設引數的好處是可以簡化資料的傳送,例如,如果為 rtp 會話設定了預設引數:

sess.setdefaultpayloadtype(0);

sess.setdefaultmark(false);

sess.setdefaulttimestampincrement(10);

之後在進行資料傳送時只需指明要傳送的資料及其長度就可以了:

sess.sendpacket(buffer, 5);

3) 資料接收

對於流**資料的接收端,首先需要呼叫 polldata() 方法來接收傳送過來的 rtp 或者 rtcp 資料報。由於同乙個 rtp 會話中允許有多個參與者(源),因此既可以通過呼叫 gotofirstsource() 和 gotonextsource() 方法來遍歷所有的源,也可以通過呼叫 gotofisstsourcewithdat() 和 gotonextsourcewithdata() 方法來遍歷那些攜帶有資料的源。在從 rtp 會話中檢測出有效的資料來源之後,接下去就可以呼叫 rtpsession 類的 getnextpacket() 方法從中抽取 rtp 資料報,當接收到的 rtp 資料報處理完之後,要及時釋放。下面的**示範了該如何對接收到的 rtp 資料報進行處理:

do while (sess.gotonextsourcewithdata());

sess.enddataaccess();

close(outfile);

jrtplib 為 rtp 資料報定義了 3 種接收模組,通過呼叫 rtpsession 類的 setreceivemode() 方法可以設定下列這些接收模式:

receivemode_all :預設的接收模式,所有到達的 rtp 資料報都將被接受;

receivemode_ignoresome :除了某些特定的傳送者之外,所有到達的 rtp 資料報都將被接受,而被拒絕的傳送者列表可以通過呼叫 addtoignorelist() , deletefromignorelist() 和 clearignorelist() 方法來進行設定;

receivemode_acceptsome :除了某些特定的傳送者之外,所有到達的 rtp 資料報都將被拒絕,而被接受的傳送者列表可以通過呼叫 addtoacceptlist() , deletefromacceptlist 和 clearacceptlist() 方法來進行設定。

socket程式設計模型

wsaasyncselect 最後仍然是這種模型的優缺點,缺點十分明顯,就是無論程式如何都需要乙個視窗來支援,雖然是非同步的通知訊息,但是仍然是在視窗函式裡同步的進行winsock呼叫,這樣就造成了如果有大量的socket在同乙個執行緒的視窗函式裡進行處理,有可能在乙個請求處理過程中又出現了新的so...

WS BPEL程式設計模型

上圖示意了ws bpel的程式設計模型,在 每個web服務 下面簡稱ws 中定義1個或多個夥伴鏈結型別 partnerlinktype,下面簡稱plt plt分為雙向plt和單向plt兩類,雙向plt規定了參與雙方的埠 port 單向plt只規定了本方的埠。業務流程 business process...

MVC 程式設計模型

mvc 是用於構建 web 應用程式的一種框架,使用 mvc model view controller 設計 mvc 模型通過三個邏輯層來定義 web 應用程式 模型 model 模型 model 是應用程式中用於處理應用程式資料邏輯的部分。通常模型物件在資料庫中訪問資料。view 檢視 view...