跳到主要内容

5.8.1. Session-Level Parsing (会话级解析)

5.8.1. Session-Level Parsing (会话级解析)

首先检查并解析会话级 (Session-Level) 行. 这些行必须按 [RFC4566] 第 5 节所定义的特定顺序并以特定语法出现. 注意, 虽然具体行类型 (例如 v=, c=) 必须按定义的顺序出现, 但同类型行 (通常为 a=) 可以任意顺序出现.

下列非属性行在 JSEP 语境中没有意义, 在通过检查后可以丢弃.

  • c= 行必须检查语法, 但其值仅用于 ICE 不匹配检测, 如 [RFC8445] 第 5.4 节所定义. 注意, JSEP 实现不应遇到该情况, 因为 WebRTC 要求使用 ICE.

  • i=, u=, e=, p=, t=, r=, z=k= 行必须检查语法, 但其值不作其他用途.

其余非属性行按下述处理:

  • v= 行的版本必须为 0, 如 [RFC4566] 第 5.1 节规定.

  • o= 行必须按 [RFC4566] 第 5.2 节解析.

  • 若存在 b= 行, 必须按 [RFC4566] 第 5.8 节解析, 并存储 bwtype 与 bandwidth 值.

最后处理属性行. 必须对下列会话级属性 (a=) 行应用特定处理:

  • 所有 a=group 行按 [RFC5888] 第 5 节解析, 并存储组的语义与 mids.

  • 若存在, 将单条 a=ice-lite 行按 [RFC8839] 第 5.3 节解析, 并存储表示存在 ice-lite 的值.

  • 若存在, 将单条 a=ice-ufrag 行按 [RFC8839] 第 5.4 节解析, 并存储 ufrag 值.

  • 若存在, 将单条 a=ice-pwd 行按 [RFC8839] 第 5.4 节解析, 并存储口令值.

  • 若存在, 将单条 a=ice-options 行按 [RFC8839] 第 5.6 节解析, 并存储所列选项集合.

  • 所有 a=fingerprint 行按 [RFC8122] 第 5 节解析, 并存储指纹与算法值集合.

  • 若存在, 将单条 a=setup 行按 [RFC4145] 第 4 节解析, 并存储 setup 值.

  • 若存在, 将单条 a=tls-id 行按 [RFC8842] 第 5 节解析, 并存储属性值.

  • 所有 a=identity 行予以解析, 身份值存储以供后续校验, 如 [RFC8827] 第 5 节规定.

  • 所有 a=extmap 行按 [RFC5285] 第 5 节解析, 并存储其值.

与 JSEP 无关的其他属性也可能出现, 实现应处理其能够识别的任何此类属性. 按 [RFC4566] 第 5.13 节要求, 未知属性行必须忽略.

会话级所有行解析完成后, 继续处理 m= 段中的行.