Rtsp之rtp包解析

rtp包的解析,纠结了好久好久,一直没有好的解决方案,最近琢磨了一下,下面给我的一些思路。

rtp包解析存在以下问题:

1、包的序号会存在乱序的可能性

2、由于序号是16字节无符号,超过65535之后,会从0开始循环

3、网络会出现丢包情况

4、如何界定一帧数据何时开始,何时结束

解决思路:

一定存在的条件:

1、rtp头里面有个序号字段,此字段是自增长的

2、rtp头里面有个timestamp字段,同一帧的不同rtp包,此字段是一样

3、当两个rtp包seq间隔为1,timesatamp不同时候,说明后一个rtp包是一帧的开始,前一个rtp包是一帧的结束

根据上述条件,我们开始解析rtp包。

设定一个期望序号,即上一个rtp的seq+1为期望序号,如果每次来的rtp都是期望序号,那么解析就简单多了。但是网络偶尔会抖动,我们把不是期望序号的rtp包,保存在一个等待的容器里面。画了一个如下的流程图:

**************************修正逻辑,增加如果期望的包前面的认为已经丢弃的包又过来的话,直接丢弃*************************

另外,还有一个非常纠结,又是seq循环之后,不能严格按照大小比较来确定是否需要丢弃,还需要考虑循环之后的情况

猜你喜欢

转载自blog.csdn.net/g0415shenw/article/details/82314195
今日推荐