📄 rtp.h
字号:
#ifndef H_RTP_INCLUDED_H
#define H_RTP_INCLUDED_H
struct CRtpHeader
{
/** RTP HEADER
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|X| CC |M| PT | sequence number | (4 Bytes)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| timestamp | (4 Bytes)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SSRC | (4 Bytes)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
**/
#ifdef BIG_ENDIAN_PLATFORM
BYTE version:2; // protocol version
BYTE p:1; // padding flag
BYTE x:1; // header extension flag
BYTE cc:4; // CSRC count
BYTE m:1; // marker bit
BYTE pt:7; // payload type
#else
BYTE cc:4; // CSRC count
BYTE x:1; // header extension flag
BYTE p:1; // padding flag
BYTE version:2; // protocol version
BYTE pt:7; // payload type
BYTE m:1; // marker bit
#endif
BYTE seq_h;
BYTE seq_l;
//WORD seq; // sequence number
BYTE ts_0;
BYTE ts_1;
BYTE ts_2;
BYTE ts_3;
//DWORD ts; // timestamp
//DWORD ssrc; // synchronization source
BYTE ssrc_0;
BYTE ssrc_1;
BYTE ssrc_2;
BYTE ssrc_3;
WORD get_seq(){return (seq_h<<8)+seq_l;}
DWORD get_ts(){return (ts_0<<24) + (ts_1<<16)+(ts_2<<8)+ts_3;}
void Parse (LPBYTE);
void set_ssrc(DWORD ssrc){ssrc_0 = BYTE(ssrc>>24); ssrc_1 = BYTE(ssrc>>16); ssrc_2 = BYTE(ssrc>>8); ssrc_3=BYTE(ssrc);}
void set_seq(WORD seq){seq_h = BYTE(seq>>8);seq_l=BYTE(seq);}
void set_ts(DWORD ts){ts_0 = BYTE(ts>>24); ts_1 = BYTE(ts>>16); ts_2 = BYTE(ts>>8); ts_3=BYTE(ts);}
};
struct CRtp : public CRtpHeader
{
BYTE data[1500];
};
#endif /*H_RTP_INCLUDED_H*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -