This is a quite simple computation or validation of the network bandwidth, but can be tricky if you don't take into account the "quality" parameter used in Speex.
Speex is designed to change bitrate depending on the desired quality, and there are 10 different levels of quality per type (narrowband (8 KHz), wideband (16 KHz), ultra-wideband (32 KHz)).
All you have to do is take the expected encoding bitrate for that quality (e.g. 28 Kbps for wideband at quality 8/10), compute the payload per frame, optionally sum the payload when you have more than 1 frame per packet, add the overhead of IP, UDP and RTP, then recompute the overall bitrate.
Each Speex frame has 20 msec duration.
The payload for Speex wideband at quality 8 (28 kbps) is:
P = (28*10^3 kbps * 20*10^-3 msec/frame) = 70 B/frame
Consider 1 frame per packet and add the overhead from IP, UDP and RTP:
Ptot = 70 B + 40 B = 110 B/packet
Compute the final network bandwidth:
BW = (110 B)*8 / (20 * 10^-3) = 44 Kbps
Disclaimer: I wrote this article on March 2022 while working with Subspace, and the original link is here: https://subspace.com/resources/i...
I needed an efficient way to programmatically extract RTP streams from a network capture. In addition I wanted to: save each stream into a s...
Docker is an incredibly useful tool to build prototypes of Linux hosts and applications. You can easily build a network of servers inside...
On a previous post I shared my experiments with node.js as a WebSocket server. This is quite useful for people working on WebRTC prototyp...