跳到主要内容

5.1.2. Profile Names and Interoperability (配置文件名称和互操作性)

5.1.2. Profile Names and Interoperability (配置文件名称和互操作性)

对于媒体 "m=" 段, JSEP 实现必须支持 [RFC5764] 中指定的 "UDP/TLS/RTP/SAVPF" 配置文件以及 [RFC7850] 中指定的 "TCP/DTLS/RTP/SAVPF" 配置文件, 并且必须为它们在提议中生成的每个媒体 "m=" 行指示这些配置文件之一。对于数据 "m=" 段, 实现必须支持 "UDP/DTLS/SCTP" 配置文件以及 "TCP/DTLS/SCTP" 配置文件, 并且必须为它们在提议中生成的每个数据 "m=" 行指示这些配置文件之一。要使用的确切配置文件由与当前默认或选定的 ICE 候选相关联的协议确定, 如 [RFC8839] 第 4.2.1.2 节中所述。

不幸的是, 为了尝试兼容性, 即使某些端点打算支持这些配置文件之一, 它们也会生成其他配置文件字符串。例如, 端点可能生成 "RTP/AVP" 但提供 "a=fingerprint" 和 "a=rtcp-fb" 属性, 表明其愿意支持 "UDP/TLS/RTP/SAVPF" 或 "TCP/DTLS/RTP/SAVPF"。为了简化与此类端点的兼容性, JSEP 实现在处理接收到的提议中的媒体 "m=" 段时必须遵循以下规则:

  • 提议中与以下任何一个匹配的配置文件必须被接受:

    • "RTP/AVP" (在 [RFC4566] 第 8.2.2 节中定义)
    • "RTP/AVPF" (在 [RFC4585] 第 9 节中定义)
    • "RTP/SAVP" (在 [RFC3711] 第 12 节中定义)
    • "RTP/SAVPF" (在 [RFC5124] 第 6 节中定义)
    • "TCP/DTLS/RTP/SAVP" (在 [RFC7850] 第 3.4 节中定义)
    • "TCP/DTLS/RTP/SAVPF" (在 [RFC7850] 第 3.5 节中定义)
    • "UDP/TLS/RTP/SAVP" (在 [RFC5764] 第 9 节中定义)
    • "UDP/TLS/RTP/SAVPF" (在 [RFC5764] 第 9 节中定义)
  • 任何生成的应答中任何 "m=" 行中的配置文件必须与提议中提供的配置文件完全匹配。

  • 因为 DTLS-SRTP 是必需的, 所以 SAVP 或 AVP 的选择没有影响; 对 DTLS-SRTP 的支持由一个或多个 "a=fingerprint" 属性的存在决定。请注意, 缺少 "a=fingerprint" 属性将导致协商失败。

  • AVPF 或 AVP 的使用仅控制用于 RTCP 反馈的时序规则。如果提供了 AVPF 或存在 "a=rtcp-fb" 属性, 则假定为 AVPF 时序, 即默认值为 "trr-int=0"。否则, 假定 AVPF 以 AVP 兼容模式使用, 并使用值 "trr-int=4000"。

  • 对于数据 "m=" 段, 实现必须支持接收 "UDP/DTLS/SCTP", "TCP/DTLS/SCTP" 或 "DTLS/SCTP" (为了向后兼容) 配置文件。

请注意, JSEP 实现的重新提议必须使用正确的配置文件字符串, 即使初始提议/应答交换使用了 (不正确的) 较旧的配置文件字符串。这简化了 JSEP 行为, 副作用极小, 因为任何无法处理此类重新提议的远程端点也将无法处理 JSEP 端点的初始提议。