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);