return PrivateBuildPacket(data,len,pt,mark,timestampinc,false);
}
+int RTPPacketBuilder::BuildPacket(const void *data,size_t len,
+ u_int8_t pt,bool mark,u_int32_t timestampinc, u_int32_t mseq)
+{
+ if (!init)
+ return ERR_RTP_PACKBUILD_NOTINIT;
+ return PrivateBuildPacket(data,len,pt,mark,timestampinc,false,0,0,0,mseq);
+}
+
int RTPPacketBuilder::BuildPacketEx(const void *data,size_t len,
u_int16_t hdrextID,const void *hdrextdata,size_t numhdrextwords)
{
int RTPPacketBuilder::PrivateBuildPacket(const void *data,size_t len,
u_int8_t pt,bool mark,u_int32_t timestampinc,bool gotextension,
- u_int16_t hdrextID,const void *hdrextdata,size_t numhdrextwords)
+ u_int16_t hdrextID,const void *hdrextdata,size_t numhdrextwords, u_int32_t mseq)
{
- RTPPacket p(pt,data,len,seqnr,timestamp,ssrc,mark,numcsrcs,csrcs,gotextension,hdrextID,
+ RTPPacket p(pt,data,len, mseq ? mseq : seqnr,timestamp,ssrc,mark,numcsrcs,csrcs,gotextension,hdrextID,
(u_int16_t)numhdrextwords,hdrextdata,buffer,maxpacksize);
int status = p.GetCreationError();
numpayloadbytes += (u_int32_t)p.GetPayloadLength();
numpackets++;
timestamp += timestampinc;
- seqnr++;
+ if (mseq) {
+ seqnr++;
+ }
return 0;
int BuildPacket(const void *data,size_t len);
int BuildPacket(const void *data,size_t len,
u_int8_t pt,bool mark,u_int32_t timestampinc);
+ int BuildPacket(const void *data,size_t len,
+ u_int8_t pt,bool mark,u_int32_t timestampinc, u_int32_t mseq);
int BuildPacketEx(const void *data,size_t len,
u_int16_t hdrextID,const void *hdrextdata,size_t numhdrextwords);
int BuildPacketEx(const void *data,size_t len,
private:
int PrivateBuildPacket(const void *data,size_t len,
u_int8_t pt,bool mark,u_int32_t timestampinc,bool gotextension,
- u_int16_t hdrextID = 0,const void *hdrextdata = 0,size_t numhdrextwords = 0);
+ u_int16_t hdrextID = 0,const void *hdrextdata = 0,size_t numhdrextwords = 0, u_int32_t mseq = 0);
RTPRandom rtprnd;
size_t maxpacksize;
}
int RTPSession::SendPacket(const void *data,size_t len,
- u_int8_t pt,bool mark,u_int32_t timestampinc)
+ u_int8_t pt,bool mark,u_int32_t timestampinc, u_int32_t mseq)
{
int status;
return ERR_RTP_SESSION_NOTCREATED;
BUILDER_LOCK
- if ((status = packetbuilder.BuildPacket(data,len,pt,mark,timestampinc)) < 0)
+ if ((status = packetbuilder.BuildPacket(data,len,pt,mark,timestampinc, mseq)) < 0)
{
BUILDER_UNLOCK
return status;
int SendPacket(const void *data,size_t len);
int SendPacket(const void *data,size_t len,
- u_int8_t pt,bool mark,u_int32_t timestampinc);
+ u_int8_t pt,bool mark,u_int32_t timestampinc, u_int32_t mseq = 0);
int SendPacketEx(const void *data,size_t len,
u_int16_t hdrextID,const void *hdrextdata,size_t numhdrextwords);
int SendPacketEx(const void *data,size_t len,