报头的第3和第4字节包含RTP分组序列号的最高有效字节和最低有效字节序列Num= (MSB<<8)+LSB
char pszPacket12;
..。
long lSeq =?-如何从数据包中获取序列号?
发布于 2009-07-16 11:27:12
unsigned short seq = (packet[2] << 8) | packet[3];请注意,这里假设packet是一个unsigned char数组。
发布于 2009-07-16 11:26:47
那肯定就是"long lSeq = (unsigned char)(pszPacket2 << 8) | (unsigned char)pszPacket3;"?
发布于 2019-02-18 20:45:44
如果你需要一个合适的实现:
typedef struct _RTPHeader
{
//first byte
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
unsigned int CC:4; /* CC field */
unsigned int X:1; /* X field */
unsigned int P:1; /* padding flag */
unsigned int version:2;
#elif G_BYTE_ORDER == G_BIG_ENDIAN
unsigned int version:2;
unsigned int P:1; /* padding flag */
unsigned int X:1; /* X field */
unsigned int CC:4; /* CC field*/
#else
#error "G_BYTE_ORDER should be big or little endian."
#endif
//second byte
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
unsigned int PT:7; /* PT field */
unsigned int M:1; /* M field */
#elif G_BYTE_ORDER == G_BIG_ENDIAN
unsigned int M:1; /* M field */
unsigned int PT:7; /* PT field */
#else
#error "G_BYTE_ORDER should be big or little endian."
#endif
guint16 seq_num; /* length of the recovery */
guint32 TS; /* Timestamp */
guint32 ssrc;
} RTPHeader; //12 bytes你能做的是:
char pszPacket[12];
RTPHeader* myRTPPacket = (RTPHeader*) pszPacket;
printf("Sequence number is: %hu", myRTPPacket->seq_num;https://stackoverflow.com/questions/1136900
复制相似问题