00001 #include "config.h" 00002 #include "rtp.h" 00003 00004 #pragma pack(1) 00005 00006 typedef struct 00007 { 00008 #if __BYTE_ORDER == __BIG_ENDIAN 00009 unsigned char version:2; 00010 unsigned char padding:1; 00011 unsigned char extension:1; 00012 unsigned char cc:4; 00013 unsigned char marker:1; 00014 unsigned char payload:7; 00015 #else 00016 unsigned char cc:4; 00017 unsigned char extension:1; 00018 unsigned char padding:1; 00019 unsigned char version:2; 00020 unsigned char payload:7; 00021 unsigned char marker:1; 00022 #endif 00023 unsigned short sequence; 00024 unsigned long timestamp; 00025 unsigned long sources[1]; 00026 } RTPHeader; 00027 00028 #pragma pack() 00029 00030 class RTPPacket 00031 { 00032 private: 00033 friend class RTPQueue; 00034 00035 RTPPacket *next, *prev; 00036 unsigned char *buffer; 00037 unsigned size; 00038 00039 inline RTPHeader *getHeader(void) 00040 {return (RTPHeader *)buffer;}; 00041 00042 unsigned getHeaderSize(void); 00043 unsigned getPayloadSize(void); 00044 00045 unsigned char *getPayload(void); 00046 00047 RTPPacket(RTPHeader *header, unsigned char *data, unsigned len); 00048 ~RTPPacket(); 00049 }; 00050