[Asterisk-Users] Low bit rate codec (speex)

John Todd jtodd at loligo.com
Tue Sep 2 11:20:24 MST 2003


At 11:42 AM -0500 9/2/03, Brian West wrote:
>
>http://bugs.digium.com/bug_view_page.php?bug_id=0000149
>
>bkw
>
>On Tue, 2 Sep 2003, Eduardo Goncalves wrote:
>
>>  On Tue, 2 Sep 2003 10:27:53 -0500 (CDT)
>>  Brian West <brian at bkw.org> wrote:
>>
>>  > I opened a request on bugs.digium.com for this feature.  The 6k and 8k
>>  > codecs are very impressive also.
>>  >
>  > > bkw
>  >
>>	Where can I see the status of this request?
>>
>>  []'s
>  > Eduardo

Spoiler: Read to the bottom about how to get 400 calls into a megabit.  Maybe.

I'm ashamed to say I had not actually looked at the lower-bandwidth 
encoding options of Speex in the past, and skipped right over that 
section of the text in favor of the high bandwidth bitrates.  What a 
mistake!  I am extremely impressed with the 4kbps VBR rate for Speex, 
at least from the samples on the Speex website.

If the sound quality is as good as advertised at the low bitrates, 
the addition of selectable features for Speex would truly be an asset 
to Asterisk on a per-call basis (heck, even just per-peer.)  I have 
several clients who need to move traffic across international IP 
capacity, and the low-bandwidth option of choice to them is G.729 
(LPC10 is not an option due to sound quality issues.)  The very 
interesting features of VAD and VBR look to be (on paper, at least) a 
real win as well, with the channel bitrate being reduced even further 
by silence and sound complexity compression.

Exposing codec feature selections to the dialplan would be 
interesting, but I expect Mark will want to (correctly) implement a 
generic method for doing this.  However, are there any other codecs 
that Asterisk supports that have the ability to use different options 
(bitrate, VBR, VAD)?  Is it worthwhile to make this a generic 
function of some sort, or is it sufficient to make specific 
techniques just for Speex? (${SPEEX-BITRATE}, or ${SPEEX-VBR} to give 
crude examples.)

Why am I so excited about this?  The point of VoIP for most of my 
customers is twofold: the first point is the addition of new and 
novel services that they would not be able to offer previously 
without investing a lot in hardware.  The second (and for some, the 
primary) point is that VoIP allows the transmission of voice packets 
over a less expensive packetized path than TDM.  Thus, the biggest 
number on their minds is "Cost of Bandwidth!"   The more voice 
streams you can pack into the bandwidth, the less they pay for 
bandwidth, and thus the larger the profit margin - very simple 
equation.  So, they're really REALLY interested in any way to get 
more calls into the same number of bits per second, and Speex seems 
to have some interesting options in that arena.

Combined with the clever use of trunking with IAX2, I could possibly 
see (looking at back-of-napkin, totally theoretical numbers) 
something like 400 calls in a megabit between two Asterisk servers. 
That number seems wrong to me, and I expect my first impression is 
correct, but here's the math: with my IAX2 tests which I documented 
previously on this list, I got a theoretical 103 calls into a megabit 
of bandwidth with G.729 at 9.6kbps per additional call.  Now, the 
Speex codec can be turned down to 4kbps, so I can get 2.4 Speex calls 
into the same space that I fit one G.729 call.  So, (2.4 * 103 = 247) 
into a megabit.  Now, usually only one person is talking at a time. 
This means VAD would be active on 50% of the channels, thus 
eliminating traffic in one way for all calls.  I'm sure that's not 
quite accurate due to background noise and overtalk, so let's say 
that only 30% of the legs are empty at any one time due to VAD.  So, 
that's an additional few channels, so now we're at (247 + (247 * .3) 
= 321) total channels.  Now I move into the really unstable math 
(i.e.: I'm making this up based on wild fantasy.)   If VBR is 
implemented, maybe/hopefully/possibly that permits us another 25% 
savings on bits per second, so that turns into (321 + (321 * .25) = 
401) channels in a single megabit.  This seems impossible.  Anyone 
care to shoot holes in these numbers?

JT





More information about the asterisk-users mailing list