In the last few months we have installed many IP-PBX systems and VoIP telephony solutions for a diversity of clients. One aspect that keeps coming back is : Which codec should we use for this particular client ? Today I'll try and point out some of the more obvious choices, together with their limitations and their advantages.
G.711a
The obvious choice : G.711a. If bandwidth is plentiful, this is the codec you will want to go for. This codec has very little impact on your PBX server CPU, doesn't require transcoding in many cases, and the call quality is the highest possible out of the three codecs discussed today ( keep in mind that G722 wideband codec has higher quality than G711 but isn't widely used with VSPs yet, so I left G722 out of the article ). An average G.711a call will use 80-85 kbps upstream and 80-85 kbps downstream ( not including overhead encapsulation ). This is the main limitation of G.711a : Bandwidth use. On an ADSL1 link, the typical upstream speed you will get is more or less 220kbps ( 256kbps is the maximum, but is rarely achieved in practice ). If you divide 220 kbps by 80 kbps, you can see you will end up with a maximum concurrent calls of 2.75 which means 2 calls maximum. ( the last 0.75 call will have insufficient bandwidth ). So for ADSL1 connections where more than 2 simultanious calls are required, G.711a is not always the best option.
G.729a
G.729a is a simplified version of the G.729 codec. It's 100% interoperable with G.729 but has been greatly simplified. Most hardware supports the G.729 codec and most VoIP Service Providers (VSP) support it, so it makes sense to include this codec in the comparison. The G.729 codec uses on average 20kbps upstream and 20kbps downstream per call ( not including encapsulation overhead ). On an ADSL1 connection you would be able to conduct ( 220kbps divided by 20kbps ) = 11 calls, instead of 2 calls. But it comes at a price : The sound quality of a G729 call is noticeably less than a G711 call.
There are some drawbacks to using G.729a codec :
- G.729 is very CPU intensive
- G.729 sound quality is noticeably lower than G.711a.
- G.729 codec requires licenses ( 10 dollars per channel on Asterisk )
iLBC
iLBC sits between G.711 and G.729. iLBC uses slightly more bandwidth than G.729 but results in better call quality. It's very hard to distinguish an iLBC call from a G.711a call. iLBC uses on average 24kbps ( so 4kbps more than G.729 ) and uses more CPU than G.729, but it results in noticeably better audio quality than G.729. iLBC also is a free codec and does not require any licenses. On an ADSL1 connection, you would be able to conduct ( 220kbps divided by 24kbps ) = 9 simultaneous calls using the iLBC codec.
The drawbacks of using the iLBC codec are :
- iLBC is not as widely supported by VSPs as G.711a and G.729.
- iLBC uses even more CPU cycles than G.729 / aLaw.