Opus and the Jitter Buffer – OTT Voice Observations – Part 5

In the previous posts on this topic I have taken a look at ‘over the top’ voice calling, how much jitter IP packets have when they arrive at the destination and which codec is used. Most over the top voice call options seem to use WebRTC as a general framework for the voice call, and WebRTC in turn uses the free Opus codec to transmit the speech path. Opus in turn uses the NetEQ jitter buffer framework to adapt to changing network conditions. So what does that mean?

In an ideal world, as shown in part 2 of this series, the jitter experienced on an Internet connection by a voice call is constant, and the size of the jitter buffer that compensates for it could be static. But as soon as you enter the real world, jitter can vary quite a bit depending on surroundings and networks used. If there are occasional longer delays before the next packets arrive, one could just use a longer jitter buffer. But one would have no way to know in advance how much jitter would occur. Also, in case longer jitter delays occur only very seldomly, it’s perhaps better to leave the jitter buffer short and cope with the impact of a seldom delay rather than to increase the round trip delay time of the speech channel. And that’s exactly what NetEQ does, it constantly adapts the jitter buffer length to the channel. But how is this possible without loosing parts of the data, e.g. in case the buffer should shrink after it has increased before to a higher value?

The answer: NetEQ can slightly increase and decrease the speed of the voice channel to increase and decrease the length of the jitter buffer. Amazing stuff. And in practice one can hear all of these things. When the channel becomes really jittery, one can actually hear that the delay between two devices increases while the voice quality remains good. Once the channel quality improves again, the delay is suddenly very short again. I have heard the speed-up and slow-down with applications like Microsoft teams before, but not so with the Conversations XMPP messenger. So perhaps WebRTC / NetEQ on Android is better at hiding or avoiding this part.

For all the hyper interesting details of this, have a look here.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.