Определение потери пакетов в процентах от пакетов, отправленных / полученных в WebRTC - PullRequest
0 голосов
/ 24 марта 2020

Я смотрю на два аудиоканала: SendAudio and ReceiveAudio, поступающих с WebRT C вызова. Для каждого соответственно мы можем видеть следующие метрики:

AudioSend
----------
packetsLost
packetsSent

AudioReceive
----------
packetsLost
packetsReceived

Мой вопрос: каково правильное уравнение для расчета потери пакетов для каждого? Включены ли «потерянные» пакеты в отправленные / отправленные пакеты?

Например, потеря пакета в процентах для двух событий WebRT C может быть определена следующим образом:

AudioSend Packet Loss as a Percent

                             currentEvent.packetsLost - previousEvent.packetsLost
--------------------------------------------------------------------------------------------------------------
(currentEvent.packetsSent + currentEvent.packetsLost) - (previousEvent.packetsSent - previousEvent.packetsLost)

Примечание: нам нужны два события, так как оба PackageLost и packetSent являются запущенными суммами ( поэтому нам нужна дельта между двумя событиями.)

Это было бы в случае, если потерянные пакеты НЕ включены в значение packetsSent (то есть их нужно было бы добавить для суммирования общего количества пакетов). которые были ПРЕДЛОЖЕННЫМИ для отправки).

Из ввода Игоря:

Потеря пакета AudioSend как процент

packetsLost
-----------  *  100
packetsSent

Потеря пакета AudioReceived как процент

           packetsLost
-----------------------------   *   100
packetsReceived + packetsLost

1 Ответ

1 голос
/ 24 марта 2020

PacketsLost не включено в packetsReceived, но включено в packetsSent. PacketsSent = packetsReceived + packetsLost + packetsDuplicated. PacketsDuplicated будет отклонено получателем. Итак, я полагаю, что вы хотите рассчитать качество звука на основе потери пакетов, я думаю, вы должны использовать скорость передачи в качестве качества звука.

          const lastTotalBytesReceived = lastScanResult.totalBytes;
          const currentTotalBytesReceived = currentScanResult.bytesReceived;
          lastScanResult.totalBytes = currentTotalBytesReceived;
          const receivedBitsDelta = 8 * (currentTotalBytesReceived - lastTotalBytesReceived);
          const passedSeconds = (currentTime - lastScanResult.time) / 1000.0;
          lastScanResult.quality = Math.round(Math.min(100, receivedBitsDelta / expectedAudioBitRate * 100));
          lastScanResult.time = currentTime;

ExpectedAudioBitRate для OPUS будет 35000, а для других кодеков 70000

...