如何在 Microsoft Teams 应用程序中计算接收到的数据包丢失

How received packets loss is getting calculated in microsoft teams app

我刚刚发现 Microsoft teams 应用程序中有一个新功能 call health,它可以显示通话中的往返时间、inter-arrival 抖动、收到的数据包丢失等统计数据。

我很想知道这里收到的丢包具体是什么意思。这个值是否对应于单个扬声器的数据包丢失?在电话会议中,可以有多个发送者,那么他们如何计算这个值?

我的理解是,假设接收方从单个发送方/多个发送方接收到一系列数据包,它可以检查与特定 sender/speaker 相对应的流中缺少哪些序列号,并可以计算数据包损失值(但在多个发送者的情况下仍然需要一个聚合函数),但这也取决于团队应用程序使用 udp 还是 tcpudp 的可能性很高,但不确定。如果它使用 udp,则数据包可能会乱序,并且通过上述想法计算损失听起来不合理。

请发表您的见解。

它的音频流的团队实现没有在任何地方记录,因此它是特定于 Microsoft 实现的。

我们可以将标准 VOIP SIP 端点实施作为最有可能参考它们如何工作的参考。

音频通常作为 RTP packets over UDP. The RTP packet has a sequence number, so it's easy to figure out packet loss of your recieved RTP data. The RTP packet is normally feed into a jitter 缓冲区实现的流接收。因此,您可以轻松计算出收到的 RTP 数据包指标(抖动、数据包丢失等)。

如果 SIP 呼叫设置协商 RTCP 通道的设置。这允许您将生成的抖动指标发送到另一端,并且您可以从呼叫的另一端接收抖动指标。

这就是 sip 客户端端点如何显示您正在谈论的指标。

由于您谈论的是电话会议,因此您没有直接与其他参与者交谈。您所拥有的是您自己与会议服务器之间的通话。会议中的所有其他参与者都有自己对会议服务器的一对一调用。会议服务器然后可以“混合”音频并将混合音频发送给每个参与者(或单独发送每个流并让客户端混合音频,具体实现)。

所以当你谈论数据包丢失时,你是在谈论你和你正在通话的另一端之间的数据包丢失。对于电话会议,这是会议服务器。