// RTPPacket.h: interface for the RTPPacket class.
|
//
|
//////////////////////////////////////////////////////////////////////
|
|
#ifndef AFX_RTPPACKET_H__ABF83EA9_2656_47A8_B910_7F3D8DEF05F3__INCLUDED_
|
#define AFX_RTPPACKET_H__ABF83EA9_2656_47A8_B910_7F3D8DEF05F3__INCLUDED_
|
|
#include <winsock.h>
|
|
// Winsock2 does not define IP_TOS, so define it
|
// #define IP_TOS 8
|
|
#define RTP_PAYLOADTYPE_G711_ULAW 0x00
|
#define RTP_PAYLOADTYPE_G711_ALAW 0x08
|
#define RTP_PAYLOADTYPE_G729 0x12
|
#define RTP_PAYLOADTYPE_G723 0x04
|
#define RTP_PAYLOADTYPE_SID 13 // it is NOT 0x13 as per Duanpei Wu
|
|
class Tracer;
|
|
class RTPPacket
|
{
|
public:
|
RTPPacket(char *buffer, int len)
|
{
|
packetPtr = buffer;
|
totalLength = len;
|
numPadding = packetPtr[0] & 0x20 ? packetPtr[totalLength - 1] : 0;
|
|
headerExtension = (packetPtr[0] & 0x10) != 0;
|
contributorCount = packetPtr[0] & 0x0f;
|
marker = (packetPtr[1] & 0x80) != 0;
|
payloadType = packetPtr[1] & 0x7f;
|
seqNo = ntohs(*((short *)(packetPtr + 2)));
|
timestamp = ntohl(*((unsigned long *)(packetPtr + 4)));
|
ssrc = ntohl(*((unsigned long *)(packetPtr + 8)));
|
version = (packetPtr[0] & 0xc0) >> 6;
|
|
headerLength = 12 + 4 * contributorCount;
|
dataLen = totalLength - headerLength - numPadding;
|
rtpData = packetPtr + headerLength;
|
}
|
virtual ~RTPPacket() {}
|
static RTPPacket* CreateRTPPacket(char *buffer, int bufferLen, Tracer *tracer);
|
bool HeaderExtension() { return headerExtension; }
|
unsigned char ContributorCount() { return contributorCount; }
|
bool Marker() { return marker; }
|
unsigned char PayloadType() { return payloadType; }
|
unsigned short SeqNo() { return seqNo; }
|
unsigned long Timestamp() { return timestamp; }
|
unsigned long Ssrc() { return ssrc; }
|
unsigned long DataLen() { return dataLen; }
|
char *RtpData() { return rtpData; }
|
char *RtpHeader() { return packetPtr; }
|
unsigned char Version() { return version; }
|
unsigned long HeaderLength() { return headerLength; }
|
RTPPacket *CloneHeader();
|
private:
|
bool headerExtension;
|
unsigned char contributorCount;
|
bool marker;
|
unsigned char payloadType;
|
unsigned short seqNo;
|
unsigned long timestamp;
|
unsigned long ssrc;
|
unsigned long dataLen;
|
char *rtpData;
|
unsigned char version;
|
unsigned long headerLength;
|
|
char *packetPtr;
|
unsigned long totalLength;
|
unsigned long numPadding;
|
};
|
|
#endif // !defined(AFX_RTPPACKET_H__ABF83EA9_2656_47A8_B910_7F3D8DEF05F3__INCLUDED_)
|