Hi,
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);