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=rtpmap或a=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属性, 则为会话生成一个defaultMediaStream 的随机 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 节要求, 未知属性行必须忽略.