跳到主要内容

5.8.2. Media Section Parsing (媒体段解析)

5.8.2. Media Section Parsing (媒体段解析)

与会话级行一样, 媒体段 (Media Section) 行必须按 [RFC4566] 第 5 节定义的特定顺序并以特定语法出现.

m= 行本身必须按 [RFC4566] 第 5.14 节描述解析, 并存储 <media>, <port>, <proto><fmt> 值.

m= 行之后, 必须对下列非属性行应用特定处理:

  • 与会话级的 c= 行类似, c= 行必须按 [RFC4566] 第 5.7 节解析, 但其值不使用.

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

还必须对下列属性行应用特定处理:

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

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

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

  • 所有 a=candidate 属性必须按 [RFC8839] 第 5.1 节解析, 并存储其值.

  • 所有 a=remote-candidates 属性必须按 [RFC8839] 第 5.2 节解析, 但其值忽略.

  • 若存在, 必须将单条 a=end-of-candidates 属性按 [RFC8840] 第 8.1 节解析, 并对其存在与否打标并存储.

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

m=<proto> 值表示使用 RTP, 如第 5.1.2 节所述, 必须处理下列属性行:

  • m=<fmt> 值必须按 [RFC4566] 第 5.14 节解析, 并存储各分项值.

  • 所有 a=rtpmapa=fmtp 行必须按 [RFC4566] 第 6 节解析, 并存储其值.

  • 若存在, 必须将单条 a=ptime 行按 [RFC4566] 第 6 节描述解析, 并存储其值.

  • 若存在, 必须将单条 a=maxptime 行按 [RFC4566] 第 6 节描述解析, 并存储其值.

  • 若存在, 必须将单条方向属性行 (例如 a=sendrecv) 按 [RFC4566] 第 6 节描述解析, 并存储其值.

  • 所有 a=ssrc 属性必须按 [RFC5576] 第 4.1 节解析, 并存储其值.

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

  • 所有 a=rtcp-fb 属性必须按 [RFC4585] 第 4.2 节解析, 并存储其值.

  • 若存在, 必须将单条 a=rtcp-mux 属性按 [RFC5761] 第 5.1.3 节解析, 并对其存在与否打标并存储.

  • 若存在, 必须将单条 a=rtcp-mux-only 属性按 [RFC8858] 第 3 节解析, 并对其存在与否打标并存储.

  • 若存在, 必须将单条 a=rtcp-rsize 属性按 [RFC5506] 第 5 节解析, 并对其存在与否打标并存储.

  • 若存在, 必须将单条 a=rtcp 属性按 [RFC3605] 第 2.1 节解析, 但其值忽略, 因为使用 ICE 时该信息多余.

  • 若存在, 必须将 a=msid 属性按 [RFC8830] 第 3.2 节解析, 并存储其值, 忽略任何 appdata 字段. 若无 a=msid 属性, 则为会话生成一个 default MediaStream 的随机 msid-id 值 (若尚未存在), 并存储该值.

  • 所有 a=imageattr 属性必须按 [RFC6236] 第 3 节解析, 并存储其值.

  • 所有 a=rid 行必须按 [RFC8851] 第 10 节解析, 并存储其值.

  • 若存在, 必须将单条 a=simulcast 行按 [RFC8853] 解析, 并存储其值.

否则, 若 m=<proto> 值表示使用 SCTP, 必须处理下列属性行:

  • m=<fmt> 值必须按 [RFC8841] 第 4.3 节解析, 并存储应用协议值.

  • 必须存在 a=sctp-port 属性, 且必须按 [RFC8841] 第 5.2 节解析, 并存储其值.

  • 若存在, 必须将单条 a=max-message-size 属性按 [RFC8841] 第 6 节解析, 并存储其值. 否则使用规定的默认值.

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