jrtplib发送数据包时默认RTP参数设置讲解

在看jrtplib手册的时候发现发送数据包有多个函数

eg:sendpacket(sendbuf,bytes);sendpacket(sendbuf,bytes,96,false,3600);

大多数时候都会设置默认参数比如:

sess.SetDefaultPayloadType(96);//RTP头中的PT
sess.SetDefaultMark(false);//RTP头中的M;重要事件标志,1bit
sess.SetDefaultTimestampIncrement(3600);//时间戳增量

当设置了默认参数的时候调用sendpacket(sendbuf,bytes);直接发送数据,此时每调用一次sendpacket的时候都会加载默认参数中的这三个值,也就是说每调用一次时间戳都会增加默认增量


调用sendpacket(sendbuf,bytes,96,false,3600);函数发送数据包时其实也是需要设置前面的参数的,因为第一次调用此函数的时候会用到默认参数,很多人认为此函数后面的三个形参不就是此次发送时所需要的三个参数吗,其实不是这样的

此函数相当于一下程序语句

sendpacket(sendbuf,bytes);

sess.SetDefaultPayloadType(96);//RTP头中的PT
sess.SetDefaultMark(false);//RTP头中的M;重要事件标志,1bit
sess.SetDefaultTimestampIncrement(3600);//时间戳增量

也就是说此函数后三个形参表示发送下一个数据包时默认参数设置

很多人会问不就应该是每发送一个数据包都要增加时间戳的值吗,那第二个函数参数多还有陷阱岂不是麻烦吗

其实不然

在发送H.264视频数据的时候,很多NALU单元大小其实超出了网络最大包1500,有的会远远的超出这个值

所以就需要采用分片封包模式来打包每个NALU单元,这个时候就不是每个发送的包都要增加时间戳了,每个nalu单元增加时间戳,这事采用第二个函数就方便的多了,只需要在分片封包模式发送最后一个数据包的时候将时间戳增量设置为3600,第一片和中间片都设置为0就好了

你可能感兴趣的:(RTP,默认参数,JRtplib,sendpacket)