RTCP Bye

Abstract

RTCP Bye

Authors

Walter Fan

Status

WIP as draft

Updated

2024-08-21

Overview

A participant sends a BYE packet to indicate that one or more sources are no longer active, optionally giving a reason for leaving.

0               1               2               3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|    SC   |   PT=BYE=203  |            length L           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           SSRC/CSRC                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
:                              ...                              :
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|     length    |               reason for leaving (opt)       ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • V, P, PT, L, SSRC/CSRC: As described for SR packets, with the packet type code 202 set.

  • SC:5 bits, The number of SSRC/CSRC identifiers contained in this BYE packet.

RTCP Bye 的数据包格式非常简单。 常规标头的有效负载类型为 203,项目计数等于数据包中包含的 SSRC 或 CSRC 数量。 然后它包含许多 32 位 SSRC 或 CSRC。

最后有一个可选部分,其中包含 8 位长度字段,然后是一个包含多个字节的字段,其中包含将字符串保留为 UTF-8 的原因。 这是一个人类可读的字符串,可以显示为通知或仅用于调试,尽管很少有实现使用它。 如果使用此扩展,则字符串后应跟有 0-3 个空 (0) 字节,以确保此可选部分在 32 位边界处结束 - 这些不计为数据包填充,因此不会将 P 位设置为 1。

当不再发送 SSRC 时,应该发送 BYE,因为流本身即将结束(例如,呼叫已结束)或 SSRC 已更改。 它允许接收者安全地清除他们所维护的与旧 SSRC 相关的任何状态(例如,其加密上下文)。 一旦为给定的 SSRC 发送了 BYE,以后就不应重复使用。

当收到 BYE 时,实现不应立即清除相关信息,因为数据包重新排序或更改路径可能意味着某些 RTP 数据包仍在传输中。 因此,最好包括一个小的延迟以避免此类问题。

作为接收方,请注意并非所有实现都会发送 BYE,即使发送 BYE,也可能不会收到它们,因为 RTCP 通常通过 UDP 发送并且没有内置弹性。 这可能导致接收器需要缓存与多个 SSRC 关联的状态,以防再次使用它们。

当暂停 RTP 流时(由于用户将其静音,或者共享停止时其内容媒体通道),建议发送者立即在该通道上发送 BYE,然后在该流停止时使用新的 SSRC 重新启动。

这避免了由于在流最终恢复时长时间没有接收到数据包而导致接收器选择丢弃与旧 SSRC 关联的状态的任何风险。 当使用 SRTP 加密时,呼叫一侧丢弃此类状态而另一侧保留该状态的情况会导致重大问题,因此实施应努力减少此类风险。