低速串行链路下IP/UDP/RTP数据包头的压缩( 六 )


不因此为下一个包重新设置期望的变化值 。期望的一次差分值仍然为1,这样假如下一个包
按顺序来到就不用再为变化进行通信 。
对于RTP时间戳,当发送FULL_HEADER,COMPRESSED_NON_TCP和COMPRESSED_UDP包刷新RTP
状态时,存储的一次差分初始化为0 。假如下一个包的时间戳一样(如相同的视频帧),则二
次差分值为0 。否则必须将两个包时间戳的差别作为新的一次差分传输并存入环境中,该值
将被加到解压器环境存储的未压缩头时间戳上 。每当后续包的一次差分改变时,都要用该变
化来更新环境 。
类似地,由于IPv4ID字段每次递增1,当用FULL_HEADER刷新状态或以非压缩形式发送携
带ID字段的COMPRESSED_NON_TCP包时,该字段的一次差分初始化为1 。然后,每当一次差分
改变其变化都会重传并存到环境中 。
这里还用了一个掩蔽码来表示哪个字段发生了非预期变化 。除了小链路顺序号外,要在
压缩的IP/UDP/RTP头中进行传输的项列表如下:
I=IPv4包ID(非IPv4头为常数0)
U=UDP校验和
M=RTP标志位
S=RTP顺序号
T=RTP时间戳
L=RTPCSRC记数和列表
假如用4位作为链路顺序号来进行丢失检测,包头中就没有足够的位逐一分配给上面的几
项并填充到一个单字节中随环境ID发送 。
因为发送源要么在会话中所有的包里包括UDP校验和,要么就根本不用校验和,所以没必
要显式地携带U位表示UDP校验和的存在 。假如以未压缩包头初始化会话状态时其校验和非0,
就说明在所有的后续压缩包中都将插入16位的未编码校验和,直到发送了另一个未压缩包改
变该设置 。对于剩余的几项,用于CSRC记数和列表的L位可能是使用频率最低的 。与其专门
在掩蔽码中用一位来表示CSRC改变,还不如采用另外一种不常用的位组合 。该位组合称为
MSTI 。假如IP包ID,RTP标志位,RTP顺序号和RTP时间戳的位都已经被使用,这种非凡情况
表示其后可能有一种扩展形式的压缩RTP包头 。该包头将包括一个额外字节,其中含有4位加
上CC记数的实际值 。当CSRC列表(长度由CC记数表示)出现在未压缩RTP头中时也将被包含
其中 。
假设RTP头中的其余字段(版本,P位,X位,负载类型和SSRC标识符)都保持相对恒定 。
非凡地,对于给定的环境SSRC标识符定义为常量,因为SSRC标识符是选择环境的一个因素 。
假如任何其它字段发生变化,都必须按照3.3.3节要求发送未压缩RTP包 。
下图中,带点划线的压缩IP/UDP/RTP头表示可选字段 。最高位为0 。多字节字段按照网络
字节顺序发送(最高字节在先) 。Delta字段通常如图所示为单字节,但根据具体delta值也可
能为2或3字节,如3.3.4节所解释 。
01234567
...............................
:会话环境ID的msb:(假如使用16位CID)
-------------------------------
会话环境ID的lsb
--- --- --- --- --- --- --- ---
MSTI链路顺序号
--- --- --- --- --- --- --- ---
::
UDP校验和 (假如环境中校验和为非0)
::
...............................
::
"RANDOM"fields (假如被封装)
::
...............................
:M"S"T"I"CC:(假如MSTI=1111)
...............................
:deltaIPv4ID:(假如I或I"=1)
...............................
:deltaRTP顺序号:(假如S或S"=1)
...............................
:deltaRTP时间戳:(假如T或T"=1)
...............................
::
:CSRClist:(假如MSTI=1111
::并且CC非0)
::
...............................

推荐阅读