jrtplib3.11.1使用摘錄

1、jthread支持與否區別

jrtplib-3.x中有兩種數據接收方式:
  《1》、使用jthread庫提供的線程自動在後臺執行對數據的接收;
  《2》、不用jthread,用戶自己定期調用RTPsession中的Poll方法(官方demo1,3,5,6中均可看到);
在這裏插入圖片描述
在這裏插入圖片描述

  • 編譯時jthread先編譯安裝後再編譯jrtplib即可支持線程處理;

2、RTP包處理方式

  《1》、 實現自己的OnRTPPacket方法; 該方法裏面不能直接釋放RTP包,因爲在之後處理流程會用到該包;如下圖:
在這裏插入圖片描述

  《2》、實現自己的OnValidatedRTPPacket方法(example6,8),該方法裏面可以直接釋放RTP包。

  《3》、實現自己的OnPollThreadStep方法(example4),該方法裏也可直接釋放RTP包。該方法在線程裏面定時調用用於接收包或發送包;
在這裏插入圖片描述
在這裏插入圖片描述

在jrtplib裏面的調用流程是《1》先執行然後再執行《2》。

3、設置jrtplib的接收模式

在jrtplib中有三種接收模式:

enum ReceiveMode 
{ 
   AcceptAll,    /**< All incoming data is accepted, no matter where it originated from. */
   AcceptSome, /**< Only data coming from specific sources will be  accepted. */    
   IgnoreSome   /**< All incoming data is accepted, except for data coming from a specific set of sources. */
};
  • AcceptAll模式是默認接收模式,所有到達的RTP包均被接收;
  • AcceptSome模式是隻接受特定發送者發過來的RTP包,其餘的拒絕。可以通過一下三個API操作接收對象。
    在這裏插入圖片描述
  • IgnoreSome模式是除了特定發送者發送過來的RTP被拒絕,其餘的都接收。可通過以下三個API操作拒絕對象。
    在這裏插入圖片描述

例子:

sessparams.SetReceiveMode(RTPTransmitter::AcceptSome);
uint32_t int_ip = ntohl(inet_addr(“192.168.1.222”));
RTPIPv4Address addr(int_ip , 0);
int my_ret = sess->AddToAcceptList(addr); /* 監控該IP源,端口設置爲0表示監控所有端口 */

4、設置接收rtp包的buffer大小

int rtp_size = transparams.GetRTPReceiveBuffer();
int rtcp_size = transparams.GetRTCPReceiveBuffer();
transparams.SetRTPReceiveBuffer(rtp_size * 20);    /* 接收RTP包的buffer設置大些,不然容易丟包或接收不全  */
sessparams.SetMaximumPacketSize(2500);

5、參考

1、流媒體協議之JRTPLIB的使用20170919

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章