00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00037 #ifndef RTPPACKET_H
00038
00039 #define RTPPACKET_H
00040
00041 #include "rtpconfig.h"
00042 #include "rtptypes.h"
00043 #include "rtptimeutilities.h"
00044 #include "rtpmemoryobject.h"
00045
00046 class RTPRawPacket;
00047
00053 class RTPPacket : public RTPMemoryObject
00054 {
00055 public:
00060 RTPPacket(RTPRawPacket &rawpack,RTPMemoryManager *mgr = 0);
00061
00068 RTPPacket(uint8_t payloadtype,const void *payloaddata,size_t payloadlen,uint16_t seqnr,
00069 uint32_t timestamp,uint32_t ssrc,bool gotmarker,uint8_t numcsrcs,const uint32_t *csrcs,
00070 bool gotextension,uint16_t extensionid,uint16_t extensionlen_numwords,const void *extensiondata,
00071 size_t maxpacksize, RTPMemoryManager *mgr = 0);
00072
00075 RTPPacket(uint8_t payloadtype,const void *payloaddata,size_t payloadlen,uint16_t seqnr,
00076 uint32_t timestamp,uint32_t ssrc,bool gotmarker,uint8_t numcsrcs,const uint32_t *csrcs,
00077 bool gotextension,uint16_t extensionid,uint16_t extensionlen_numwords,const void *extensiondata,
00078 void *buffer,size_t buffersize,RTPMemoryManager *mgr = 0);
00079
00080 virtual ~RTPPacket() { if (packet && !externalbuffer) RTPDeleteByteArray(packet,GetMemoryManager()); }
00081
00083 int GetCreationError() const { return error; }
00084
00086 bool HasExtension() const { return hasextension; }
00087
00089 bool HasMarker() const { return hasmarker; }
00090
00092 int GetCSRCCount() const { return numcsrcs; }
00093
00097 uint32_t GetCSRC(int num) const;
00098
00100 uint8_t GetPayloadType() const { return payloadtype; }
00101
00106 uint32_t GetExtendedSequenceNumber() const { return extseqnr; }
00107
00109 uint16_t GetSequenceNumber() const { return (uint16_t)(extseqnr&0x0000FFFF); }
00110
00112 void SetExtendedSequenceNumber(uint32_t seq) { extseqnr = seq; }
00113
00115 uint32_t GetTimestamp() const { return timestamp; }
00116
00118 uint32_t GetSSRC() const { return ssrc; }
00119
00121 uint8_t *GetPacketData() const { return packet; }
00122
00124 uint8_t *GetPayloadData() const { return payload; }
00125
00127 size_t GetPacketLength() const { return packetlength; }
00128
00130 size_t GetPayloadLength() const { return payloadlength; }
00131
00133 uint16_t GetExtensionID() const { return extid; }
00134
00136 uint8_t *GetExtensionData() const { return extension; }
00137
00139 size_t GetExtensionLength() const { return extensionlength; }
00140 #ifdef RTPDEBUG
00141 void Dump();
00142 #endif // RTPDEBUG
00143
00149 RTPTime GetReceiveTime() const { return receivetime; }
00150 private:
00151 void Clear();
00152 int ParseRawPacket(RTPRawPacket &rawpack);
00153 int BuildPacket(uint8_t payloadtype,const void *payloaddata,size_t payloadlen,uint16_t seqnr,
00154 uint32_t timestamp,uint32_t ssrc,bool gotmarker,uint8_t numcsrcs,const uint32_t *csrcs,
00155 bool gotextension,uint16_t extensionid,uint16_t extensionlen_numwords,const void *extensiondata,
00156 void *buffer,size_t maxsize);
00157
00158 int error;
00159
00160 bool hasextension,hasmarker;
00161 int numcsrcs;
00162
00163 uint8_t payloadtype;
00164 uint32_t extseqnr,timestamp,ssrc;
00165 uint8_t *packet,*payload;
00166 size_t packetlength,payloadlength;
00167
00168 uint16_t extid;
00169 uint8_t *extension;
00170 size_t extensionlength;
00171
00172 bool externalbuffer;
00173
00174 RTPTime receivetime;
00175 };
00176
00177 #endif // RTPPACKET_H
00178