⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtppacket.h

📁 rtp在linux下的实现
💻 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 + -