Skip to content

Commit

Permalink
op ch6
Browse files Browse the repository at this point in the history
  • Loading branch information
milzero committed Jun 24, 2024
1 parent 637d625 commit 3b2b4b1
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 91 deletions.
19 changes: 1 addition & 18 deletions src/包头压缩.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,11 +68,8 @@ RTP 包头压缩使用了很多相同的技术,观察表明,尽管每个数
上下文包含以下状态信息,这些信息将在收到完整的包头包时进行初始化:

- 传送的最后一个数据包的完整 IP,UDP 和 RTP 包头,可能包括 CSRC 列表

- 当接收到一个完整的包头时,将会把 IPv4 的 ID 字段的一阶差分初始化为 1。(当 RTP-over-UDP/IPv6 被压缩时,不需要此信息,因为 IPv6 没有 ID 字段)

- 当接收到一个完整的包头时,RTP 的 timestamp 字段 的一阶差分初始化为 0。

- CRTP 序列号(4bit)的最后一个值,用于检测压缩链路丢包。

有了这些上下文信息,接收端就可以解码收到的每个连续数据包。尽管可能需要使用每个数据包更新存储在上下文中的状态,但不再需要额外的其他状态。
Expand All @@ -96,15 +93,10 @@ RTP 包头压缩使用了很多相同的技术,观察表明,尽管每个数
你可以通过采用先前存储在上下文中的报头来重构 RTP 包头,按如下所述进行修改:

- 如果所有 M,S,T 和 I 都为 1,则数据包包含 CC 字段和 CSRC 列表以及 M‘,S’,T‘,I’。在这种情况下,M,S,T,I 字段用于预测标记位,序列号,时间戳和 IPv4 ID。CC 字段和 CSRC 列表基于压缩的 RTP 包被更新。否则,CC 和 CSRC 列表将基于先前的数据包进行重建。

- M 位被压缩 RTP 包中的 M(或 M’)位所代替。

- 如果压缩 RTP 包中的 S 或 S‘位为 1,则 RTP 序列号将增加由压缩 RTP 包中的 delta RTP sequence 指示的值。否则 RTP 序列号自增 1。

- 如果压缩 RTP 包中设置了 T 或 T’位,则将 RTP 时间戳增加压缩 RTP 数据包中的 delta RTP timestamp 字段指示的值,并更新上下文中存储的时间戳的一阶差分值。否则,RTP 时间戳会根据上下文中存储的一阶差分值递增。

- 如果上下文中设置了 X 位,将从压缩 RTP 中恢复 header extension 字段。

- 如果上下文中设置了 P 位,将从压缩 RTP 中恢复 padding 字段。

上下文以及任何对 IPv4 ID,RTP 时间戳 的一阶差分和链路层序列号的更新将使用新接收到的包头来进行更新。然后,将重构的包头和负载数据传递到 IP 栈,以常规方式进行处理。
Expand Down Expand Up @@ -136,9 +128,7 @@ CRTP 的另一个限制因素是数据包重排序。如果数据包在压缩链
观察媒体流包头字段的变化,可以发现这些字段分为三类:

1. 有些字段或者大部分字段都是静态不变的。比如 RTP,SSRC,UDP 端口号和 IP 地址。这些字段在连接建立时发送一次,它们或者从不改变,或者变化不频繁。

2. 有些字段随着数据包的发送以可预测的方式变化,但偶尔会突然变化。比如 RTP 时间戳,序列号,以及 IPv4 ID 字段。在这些字段可预测期间,它们通常有一个恒定的关系。当突然变化时,通常只有一个字段发生了不可预期的变化。

3. 有些字段是不可预测的,基本上是随机的,必须按原样进行通信,不能进行压缩。主要是 UDP 校验和。

ROHC 通过在 RTP 序列号和其他可预测字段之间建立映射函数(mapping functions)进行操作,然后可靠的传输 RTP 序列号和不可预测的包头字段。这些静态函数与在启动或当这些字段更改时传递的静态字段一起构成了压缩上下文的一部分。
Expand All @@ -150,9 +140,7 @@ ROHC 和 CRTP 的主要差别在它们处理第二类字段(通常以可预测
ROHC 具有三种运行状态,具体取决于传输的上下文量:

1. 系统以初始化和刷新状态启动,非常类似于 CRTP 的完整包头模式。 此状态传达了建立上下文的必要信息,使系统能够进入一阶或二阶压缩状态。

2. 一阶压缩状态使系统有效地传播媒体流中的不规范信息(上下文的变化),同时仍然保持很高的压缩效率。在这种状态下,只传输 RTP 序列号的压缩表示以及上下文标识符和更改字段的简化表示。

3. 当根据 RTP 序列号和存储的上下文可以预测整个包头时,二阶状态是最高的压缩级别。包中只包含 RTP 序列号的压缩表示(可能是隐式的)和上下文标识符,给出的包头可以小到只有一个八位组。

如果存在任何不可预测的字段(如 UDP 校验和),则一阶和二阶压缩方案都会不变的传递这些字段。如预期那样,造成的结果是压缩效率显著降低。为了简单起见,这个描述省略了对它们的进一步提及,尽管它们总会被传递。
Expand All @@ -162,9 +150,7 @@ ROHC 具有三种运行状态,具体取决于传输的上下文量:
系统可以以三种模式之一运行:单向,双向乐观(bidirectional optimistic),双向可靠(bidirectional reliable)。根据选择的模式,编码器将根据超时或确认从初始化和刷新状态转换到一阶或二阶压缩状态:

1. 单向模式。有可能没有反馈,编码器会在发送预定数量的数据包之后,转换到一阶或二阶状态。

2. 双向乐观模式。与单向模式一样,编码器在发送了预定数量的数据包之后,或收到确认时将转换为一阶或二阶状态。

3. 双向可靠模式。编码器在收到确认后转换为一阶或二阶状态。

单向或双向反馈模式的选择取决于编码器和解码器之间链路的特性。一些网络链路可能不支持(对其不友好)反馈消息的反向通道,从而迫使运行于单向模式。但是,在大多数情况下,可以使用双向模式之一,从而使接收端可以将其状态传达给发送端。
Expand All @@ -191,12 +177,9 @@ ROHC 具有三种运行状态,具体取决于传输的上下文量:

可解释区间是 _V<sub>ref</sub>_ 偏移参数 _p_ 后,周围 _2<sup>k</sup>_ 范围内的值,从 _Vref - p__Vref + 2<sup>k</sup> -1 - p_ 。参数*p* 是基于初始化期间被传输并传送到解码器的字段的特性来选择的,从而构成上下文的一部分。可能的选择包括:

- 如果字段的值期望被增加,则 _p = -1_

- 果字段的值期望被增加,则 _p = -1_
- 如果字段的值期望被增加或保持不变,则 _p = 0_

- 如果字段的值期望与固定值不同,则 _p = 2<sup>(k-1)</sup> + 1_

- 如果字段的值期望经历小的负变化和大的正变化(如使用 B 帧的视频流的 RTP 时间戳),则 _p = 2<sup>(k-2)</sup> - 1_

序列号传输示例。假定,最后传输的值 _V<sub>ref</sub> = 984__k = 4_(表示 4 个最低有效位作为编码格式传输)。假设 _p = -1_,计算出可解释区间为 985 到 1000,如图 11.5 所示。下一个发送的值是 985(二进制:1111011001)被编码为 9(二进制:1001,985 的 4 个最低有效位)。收到编码后的值后,解码器获取到 _V<sub>ref</sub>_,然后使用接收到的数据替换其 _k_ 个最低有效位,来恢复原始值。
Expand Down
Loading

0 comments on commit 3b2b4b1

Please sign in to comment.