[Speex-dev] ABR troubles

Thorvald Natvig speex at natvig.com
Thu Dec 15 22:37:59 PST 2005


I'm having a bit of trouble with the ABR. I'm a developer of Mumble, a 
voicechat application for gamers, and up to now we've just used VBR 
quality to determine the bitrate. In an effort to make the resource 
requirements a little more determinable (and limitable) for hosting, I 
tried switching to ABR, as there doesn't seem to be a way to determine
the absolute peak bandwidth VBR will output. I thought getting the bitrate 
just after setting the vbr quality was the maximum, but this seems to be 
just a good guess of the average.

.. Unfortunately, and a bit unexpectedly, the same is true for ABR. If you 
have a loooong period of silence in the beginning, st->vbr_quality will 
slowly increase. If you then have lots of talking, st->vbr_quality 
decreases very very slowly as st->abr_count is now very high. The end 
result is that the target bitrate is exceeded quite drastically over short 
time periods. As the limit is there to keep the network bandwidth from 
peaking, this means I have a problem.

Is there a way to make VBR or ABR give a guarantee of a maximum bandwidth 
they will not exceed? Ideally, I'd like something like:

float f = 5.0;
speex_encoder_ctl(st,SPEEX_SET_VBR_QUALITY, &f);
int i = 7;
speex_encoder_ctl(st,SPEEX_SET_MAX_ADAPT_QUALITY, &i);

More information about the Speex-dev mailing list