首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RTP序列提取

RTP序列提取
EN

Stack Overflow用户
提问于 2009-07-16 11:13:59
回答 5查看 1.6K关注 0票数 2

报头的第3和第4字节包含RTP分组序列号的最高有效字节和最低有效字节序列Num= (MSB<<8)+LSB

char pszPacket12;

..。

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

EN

回答 5

Stack Overflow用户

发布于 2009-07-16 11:27:12

代码语言:javascript
复制
unsigned short seq = (packet[2] << 8) | packet[3];

请注意,这里假设packet是一个unsigned char数组。

票数 4
EN

Stack Overflow用户

发布于 2009-07-16 11:26:47

那肯定就是"long lSeq = (unsigned char)(pszPacket2 << 8) | (unsigned char)pszPacket3;"?

票数 2
EN

Stack Overflow用户

发布于 2019-02-18 20:45:44

如果你需要一个合适的实现:

代码语言:javascript
复制
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

你能做的是:

代码语言:javascript
复制
char pszPacket[12];
RTPHeader* myRTPPacket = (RTPHeader*) pszPacket;
printf("Sequence number is: %hu", myRTPPacket->seq_num;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1136900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档