首页 > 解决方案 > 在大端架构中提取 RTP 序列

问题描述

为了在 little endian 架构中提取 RTP 标头的序列号,使用以下类型 unsigned short seq = (packet[2] << 8) | 数据包[3];在大端序中,以下是正确的 unsigned short seq = (packet[3] << 8) | 数据包[2]?

标签: sequenceendiannessrtp

解决方案


不,您在两种架构上使用相同的代码。重要的是数据的字节序格式,而不是 CPU 的字节序。

根据协议规范,RTP 序列号以最高有效字节在前和最低有效字节在后的方式存储。因此,如果序列号是 0x1234(或十进制 4660),它将存储在您的 2 个字节中packet[2],并packet[3]作为

packet byte   0   1   2   3
             +---+---+---+---+
             |...|...|12 |34 |
             +---+---+---+---+

现在您要提取字节 2 并将其作为整数中的最高有效字节,并将字节 3 置于最低有效字节,这就是代码:

uint16_t seq = (packet[2] << 8) | packet[3];

这使得seq值 0x1234(或十进制 4660)与 CPU 的字节序无关。


推荐阅读