RTP序列提取物

问题描述 投票:2回答:3

RTP分组由12字节RTP报头和随后的RTP有效载荷组成。报头的第3和第4字节包含RTP分组的序列号的最高有效字节和最低有效字节Seq Num =(MSB < <8)+ LSB

char pszPacket [12];

...

长lSeq = ???? - 如何从数据包中获取序列号?

c++ rtp
3个回答
4
投票
unsigned short seq = (packet[2] << 8) | packet[3];

2
投票

当然那只是“长lSeq =(unsigned char)(pszPacket [2] << 8)|(unsigned char)pszPacket [3];”?


0
投票

如果您需要正确的实现:

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;
© www.soinside.com 2019 - 2024. All rights reserved.