如何计算不同RTP包的Sequence Number差值

视音频数据常用RTP格式进行封装,客户端(数据接收方)常常用RTP包头中的Sequence Number来判断是否存在丢包。

如何计算不同RTP包的Sequence Number差值_第1张图片
RTP Header

从RTP Header来发现,Sequence Number是16bit的,所以运行一段时间后,会出现回滚的现象。即Sequence Number最大的值为0xFFFF, 达到这个值之后的,接着从0开始接着增加。
如何计算不同的RTP包的之间的Sequence Number差值呢?

    WORD dwSeqNumber1 = 0xFFFF;
    WORD dwSeqNumber2 = 0;

    // 16个字节可最多表示多少数字
    const int MAX_SEQ_NUMBER = 0xFFFF + 1;

    int nDistance = (int)(dwSeqNumber2 + MAX_SEQ_NUMBER - dwSeqNumber1) % MAX_SEQ_NUMBER;

    printf("The distance between dwSeqNumber2:%u and dwSeqNumber1:%u is %d",
           dwSeqNumber2, dwSeqNumber1, nDistance);

注:

typedef unsigned short      WORD;

运行结果:


运行结果

封装成函数:

__inline int GetSequenceDistance(WORD awSeq1, WORD awSeq2)
{
    return (int)(awSeq1 + 65536 - awSeq2) % 65536;  
}

你可能感兴趣的:(如何计算不同RTP包的Sequence Number差值)