下图是RTCP feedback的消息头通用格式, 每个字段的含义在前文中都有介绍.
对于不同的feedback消息 他们的FCI是不一样的, 下面是NACK的FCI
-
PID : 2字节, packet ID, 丢包的seqNumber
-
BLP : 2字节, bitmask of following lost pacckets, 丢失包后面包的丢包掩码.
-
例如: 丢失包的seqnum是111, 那么BLP就是这个111之后, 16个包的丢包情况, 从低位到高位分别表示seqnum区间为112 - 128的丢包情况, 丢失了则在对应的位上置1.
通过抓包解析NACK消息
通过过滤RTCP消息, 抓取RTP Feedback的消息, 其中找到FMT为1的nack消息
FCI中:
-
PID为32851, 说明丢包起始位置在32851
-
BLP为0x0003, 说明32853和32854也丢失了
发送端通过解析这个消息, 获取丢包seqnum, 在自己发送的历史记录中找到这几个包, 通过RTX重新发送给接收端.