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

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

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;  
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • gihub:https://github.com/wangdxh/Desert-Eagle/只实现了视频的处理。r...
    little_wang阅读 9,871评论 0 21
  • 定义 网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。网络协议主要由三个要素组成:语义、语法及时...
    FlyAndroid阅读 1,013评论 0 10
  • 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者...
    保川阅读 5,987评论 1 13
  • 今天老师讲如何美好声音。虚实结合。而自己的感觉是基本功还没练好。气息掌握。丝音练习。嘿音练习。松喉咙的方法。口腔共...
    羽化成花阅读 221评论 0 0
  • 多数人喜欢历史悠久的建筑、独特的城市抑或风格多样的小城镇作为旅途目的地。 所谓“文化”如今谈来是如此泛滥和媚俗...
    tranthy阅读 255评论 0 1