JRTPLIB  3.11.2 (development version)
rtppacket.h
Go to the documentation of this file.
1 /*
2 
3  This file is a part of JRTPLIB
4  Copyright (c) 1999-2017 Jori Liesenborgs
5 
6  Contact: jori.liesenborgs@gmail.com
7 
8  This library was developed at the Expertise Centre for Digital Media
9  (http://www.edm.uhasselt.be), a research center of the Hasselt University
10  (http://www.uhasselt.be). The library is based upon work done for
11  my thesis at the School for Knowledge Technology (Belgium/The Netherlands).
12 
13  Permission is hereby granted, free of charge, to any person obtaining a
14  copy of this software and associated documentation files (the "Software"),
15  to deal in the Software without restriction, including without limitation
16  the rights to use, copy, modify, merge, publish, distribute, sublicense,
17  and/or sell copies of the Software, and to permit persons to whom the
18  Software is furnished to do so, subject to the following conditions:
19 
20  The above copyright notice and this permission notice shall be included
21  in all copies or substantial portions of the Software.
22 
23  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
24  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
26  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
28  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
29  IN THE SOFTWARE.
30 
31 */
32 
37 #ifndef RTPPACKET_H
38 
39 #define RTPPACKET_H
40 
41 #include "rtpconfig.h"
42 #include "rtptypes.h"
43 #include "rtptimeutilities.h"
44 #include "rtpmemoryobject.h"
45 
46 namespace jrtplib
47 {
48 
49 class RTPRawPacket;
50 
56 class JRTPLIB_IMPORTEXPORT RTPPacket : public RTPMemoryObject
57 {
58  JRTPLIB_NO_COPY(RTPPacket)
59 public:
65 
72  RTPPacket(uint8_t payloadtype,const void *payloaddata,size_t payloadlen,uint16_t seqnr,
73  uint32_t timestamp,uint32_t ssrc,bool gotmarker,uint8_t numcsrcs,const uint32_t *csrcs,
74  bool gotextension,uint16_t extensionid,uint16_t extensionlen_numwords,const void *extensiondata,
75  size_t maxpacksize, RTPMemoryManager *mgr = 0);
76 
79  RTPPacket(uint8_t payloadtype,const void *payloaddata,size_t payloadlen,uint16_t seqnr,
80  uint32_t timestamp,uint32_t ssrc,bool gotmarker,uint8_t numcsrcs,const uint32_t *csrcs,
81  bool gotextension,uint16_t extensionid,uint16_t extensionlen_numwords,const void *extensiondata,
82  void *buffer,size_t buffersize,RTPMemoryManager *mgr = 0);
83 
84  virtual ~RTPPacket() { if (packet && !externalbuffer) RTPDeleteByteArray(packet,GetMemoryManager()); }
85 
87  int GetCreationError() const { return error; }
88 
90  bool HasExtension() const { return hasextension; }
91 
93  bool HasMarker() const { return hasmarker; }
94 
96  int GetCSRCCount() const { return numcsrcs; }
97 
101  uint32_t GetCSRC(int num) const;
102 
104  uint8_t GetPayloadType() const { return payloadtype; }
105 
110  uint32_t GetExtendedSequenceNumber() const { return extseqnr; }
111 
113  uint16_t GetSequenceNumber() const { return (uint16_t)(extseqnr&0x0000FFFF); }
114 
116  void SetExtendedSequenceNumber(uint32_t seq) { extseqnr = seq; }
117 
119  uint32_t GetTimestamp() const { return timestamp; }
120 
122  uint32_t GetSSRC() const { return ssrc; }
123 
125  uint8_t *GetPacketData() const { return packet; }
126 
128  uint8_t *GetPayloadData() const { return payload; }
129 
131  size_t GetPacketLength() const { return packetlength; }
132 
134  size_t GetPayloadLength() const { return payloadlength; }
135 
137  uint16_t GetExtensionID() const { return extid; }
138 
140  uint8_t *GetExtensionData() const { return extension; }
141 
143  size_t GetExtensionLength() const { return extensionlength; }
144 #ifdef RTPDEBUG
145  void Dump();
146 #endif // RTPDEBUG
147 
153  RTPTime GetReceiveTime() const { return receivetime; }
154 private:
155  void Clear();
156  int ParseRawPacket(RTPRawPacket &rawpack);
157  int BuildPacket(uint8_t payloadtype,const void *payloaddata,size_t payloadlen,uint16_t seqnr,
158  uint32_t timestamp,uint32_t ssrc,bool gotmarker,uint8_t numcsrcs,const uint32_t *csrcs,
159  bool gotextension,uint16_t extensionid,uint16_t extensionlen_numwords,const void *extensiondata,
160  void *buffer,size_t maxsize);
161 
162  int error;
163 
164  bool hasextension,hasmarker;
165  int numcsrcs;
166 
167  uint8_t payloadtype;
168  uint32_t extseqnr,timestamp,ssrc;
169  uint8_t *packet,*payload;
170  size_t packetlength,payloadlength;
171 
172  uint16_t extid;
173  uint8_t *extension;
174  size_t extensionlength;
175 
176  bool externalbuffer;
177 
178  RTPTime receivetime;
179 };
180 
181 } // end namespace
182 
183 #endif // RTPPACKET_H
184 
A memory manager.
Definition: rtpmemorymanager.h:151
Represents an RTP Packet.
Definition: rtppacket.h:57
uint32_t GetCSRC(int num) const
Returns a specific CSRC identifier.
RTPPacket(uint8_t payloadtype, const void *payloaddata, size_t payloadlen, uint16_t seqnr, uint32_t timestamp, uint32_t ssrc, bool gotmarker, uint8_t numcsrcs, const uint32_t *csrcs, bool gotextension, uint16_t extensionid, uint16_t extensionlen_numwords, const void *extensiondata, size_t maxpacksize, RTPMemoryManager *mgr=0)
Creates a new buffer for an RTP packet and fills in the fields according to the specified parameters.
uint8_t GetPayloadType() const
Returns the payload type of the packet.
Definition: rtppacket.h:104
int GetCreationError() const
If an error occurred in one of the constructors, this function returns the error code.
Definition: rtppacket.h:87
uint8_t * GetPacketData() const
Returns a pointer to the data of the entire packet.
Definition: rtppacket.h:125
uint32_t GetExtendedSequenceNumber() const
Returns the extended sequence number of the packet.
Definition: rtppacket.h:110
void SetExtendedSequenceNumber(uint32_t seq)
Sets the extended sequence number of this packet to seq.
Definition: rtppacket.h:116
uint16_t GetSequenceNumber() const
Returns the sequence number of this packet.
Definition: rtppacket.h:113
RTPPacket(RTPRawPacket &rawpack, RTPMemoryManager *mgr=0)
Creates an RTPPacket instance based upon the data in rawpack, optionally installing a memory manager.
uint8_t * GetExtensionData() const
Returns the length of the header extension data.
Definition: rtppacket.h:140
RTPTime GetReceiveTime() const
Returns the time at which this packet was received.
Definition: rtppacket.h:153
size_t GetPayloadLength() const
Returns the payload length.
Definition: rtppacket.h:134
bool HasExtension() const
Returns true if the RTP packet has a header extension and false otherwise.
Definition: rtppacket.h:90
size_t GetExtensionLength() const
Returns the length of the header extension data.
Definition: rtppacket.h:143
RTPPacket(uint8_t payloadtype, const void *payloaddata, size_t payloadlen, uint16_t seqnr, uint32_t timestamp, uint32_t ssrc, bool gotmarker, uint8_t numcsrcs, const uint32_t *csrcs, bool gotextension, uint16_t extensionid, uint16_t extensionlen_numwords, const void *extensiondata, void *buffer, size_t buffersize, RTPMemoryManager *mgr=0)
This constructor is similar to the other constructor, but here data is stored in an external buffer b...
size_t GetPacketLength() const
Returns the length of the entire packet.
Definition: rtppacket.h:131
bool HasMarker() const
Returns true if the marker bit was set and false otherwise.
Definition: rtppacket.h:93
uint32_t GetSSRC() const
Returns the SSRC identifier stored in this packet.
Definition: rtppacket.h:122
uint8_t * GetPayloadData() const
Returns a pointer to the actual payload data.
Definition: rtppacket.h:128
uint32_t GetTimestamp() const
Returns the timestamp of this packet.
Definition: rtppacket.h:119
int GetCSRCCount() const
Returns the number of CSRCs contained in this packet.
Definition: rtppacket.h:96
uint16_t GetExtensionID() const
If a header extension is present, this function returns the extension identifier.
Definition: rtppacket.h:137
This class is used by the transmission component to store the incoming RTP and RTCP data in.
Definition: rtprawpacket.h:53
This class is used to specify wallclock time, delay intervals etc.
Definition: rtptimeutilities.h:86