Karl Fife
2010-Feb-16 17:29 UTC
[asterisk-users] CODECS: Best practice question: Avoid transcode when calling out?
What is the current best practice to avoid transcoding on an outgoing call to a party whose codec preference is not known in advance? In other words, incoming calls are easy since codecs are negotiated from least-known (the remote party) to most-known (my endpoint) and my codecs can simply be preferred accordingly to match the remote. Outbound calls seem harder. Our endpoints always negotiate g.722 between themselves and Asterisk and then Asterisk must transcode to the preferred codec of the REMOTE party. Not ideal. It's easy if I'm calling to the PSTN--since I know in advance the preferences of my ITSP, but I'm stumped about how to avoid transcoding when calling a party whose codec preferences are not known in advance. Is there an elegant way to do this? -Karl
Philipp von Klitzing
2010-Feb-16 18:31 UTC
[asterisk-users] CODECS: Best practice question: Avoid transcode when calling out?
Hi Karl, that's funny you are asking this, am also currently looking at how to solve the g722 codec negotiation riddle, in my particular case to play nicely together with a KonfTel 300 IP conference phone.> In other words, incoming calls are easy since codecs are negotiated > from least-known (the remote party) to most-known (my endpoint) and my > codecs can simply be preferred accordingly to match the remote.Look at setting the channel variable_SIP_CODEC - however it might or might not work depending on your version of Asterisk, see for example: https://issues.asterisk.org/view.php?id=13243 Here's a dialplan snippet that might give you another hint or two. exten => 123,1,NoOp(-- Inbound read: ${CHANNEL(audioreadformat)} --) exten => 123,n,NoOp(-- Inbound native: ${CHANNEL(audionativeformat)} --) exten => 123,n,Set(WIDEBAND=0) exten => 123,n,Set(WIDEBAND=${REGEX("g722" ${SIPPEER(${SIPCHANINFO(peername)}:codecs)})}) exten => 123,n,ExecIf($[${WIDEBAND} = 1]|Set|_SIP_CODEC=g722) exten => 123,n,Dial(SIP/abc123) Please note the SPACE between ${REGEX("g722" and ${SIPPEER> Outbound calls seem harder. Our endpoints always negotiate g.722 between > themselves and Asterisk and then Asterisk must transcode to the preferred > codec of the REMOTE party. Not ideal.Together with the g722 transcoding patch for Asterisk 1.4.17 it does not work out, unfortunately. Currently I cannot make a statement on a more recent 1.4 release. g722 patch: http://users.netplex.net/~andrew/asterisk/#g722 Older patch that I use for 1.4.17: http://users.netplex.net/~andrew/asterisk/g722-20080110.patch.gz However I can successfully employ setting _SIP_CODEC if in the example above instead of "Dial()" I do a "MusicOnHold()" - both with or without a preceeding ANSWER; without means early audio playing of the native g722 encoded MOH file. My snom starts out with alaw, and then we switch to g722.> Is there an elegant way to do this?Consider the codec negotiation patch? I'd be interested to hear about your results! http://www.b2bua.org/wiki/AsteriskCodecNegotiationPatch https://issues.asterisk.org/view.php?id=4825 Philipp