// 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 // 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_)