📄 rtppacket.h
字号:
// 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_
#ifdef WIN32
#include <winsock.h>
#else
#include <netinet/in.h>
#endif
// 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 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() {}
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_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -