Cambiar el codec a utilizar desde el dialplan
Rebuscando en chan_sip.c, me he dado cuenta de que se puede seleccionar el codec a usar antes de realizar o contestar a una llamada. Esto es de gran utilidad si tenemos dos números con un proveedor, y uno lo usamos para voz y otro para fax.
Vamos a suponer que el número 902111111 es el de voz, y el 902222222 el de fax:
[from-pstn] exten => 902111111,1,Dial(SIP/101) exten => 902222222,1,Set(__SIP_CODEC=alaw) exten => 902222222,2,Dial(SIP/102)
En el segundo caso, estableciendo la variable SIP_CODEC, provocará que, aunque estén habilitados otros codecs, se intente usar ‘alaw’. Eso sí, siempre y cuando esté soportado por ambos extremos.
En el caso de llamadas salientes, nos permite que las llamadas que provengan de una extensión donde esté conectada la máquina de fax, se negocien siempre en un codec compatible.
[from-internal]
exten => _9XXXXXXXX,1,Dial(SIP/itsp/${EXTEN})
[from-internal-fax]
exten => _X.,1,Set(__SIP_CODEC=alaw)
exten => _X.,2,Goto(from-internal,${EXTEN},1)



[…] Leo en el blog de Julian JM un artículo interesante sobre como cambiar el códec a utilizar desde el própio dialplan. Útil sin duda. […]
Pingback by Mi Brain-Training Personal» Blog Archive » Seleccionar el códec a utilizar desde el dialplan
— 5 January 2007 @ 14:13
El tema es si funciona. Yo lo probé hace tiempo en la 1.2 y no tiraba ni a tiros, aunque en el fuente venía y no estaba documentado.
Mi prueba era tener un número entrante en 711 y otro en 729 de dos proveedores distintos. Y el Linksys negociaba 711 siempre.
Lo probaste y funciona ya?
Comment by Alberto
— 6 January 2007 @ 13:41
Alberto, en mi caso lo necesito porque tengo dos DID de un mismo proveedor. Uno para fax, y otro para voz. Cuando recibo una llamada por el primero, quiero que se negocie todo en G711, y cuando entra por el segundo, que utilice uno con más compresión (G729, GSM, etc). Hata ahora, mi solución era trabajar en G711 siempre. Ahora puedo tener más llamadas de voz simultáneas, con el mismo ancho de banda.
Si son dos proveedores distintos, como en tu caso, en los que vas a poder filtrar por IP (insecure=very), la mejor solución es el allow/disallow en sip.conf para ese peer.
[peer1]
disallow=all
allow=alaw
type=friend
host=1.2.3.4
insecure=very
….
[peer2]
disallow=all
allow=g729
type=friend
host=9.8.7.6
insecure=very
…
Comment by julianjm
— 6 January 2007 @ 14:08
Hola Amigo, quisiera por favorme me explique como puedo usar el Linksys Pap2T con varios proveedores en cada puerto, y enrutar la llamada por el proveedor que sea más conveniente. No se si será esto posible, o si el Linksys Pap2T acepta esta funcionalidad, por que tengo entendido que esto se puede programar en el Dial Plan, pero sólo esto he verificado que se puede hacer en un SPA3000, hasta 5 proveedores (Line1,GW1,…, GW4). Por favor le agradecería me aclare esta duda, y de ser posible programarlo, le rogaría pueda explicarme como hacerlo.
Comment by Juan Carlos Valera Romero
— 8 January 2007 @ 5:41
Como puedo leer el codec del canal actual? ${SIP_CODEC} esta vacio desde el comienzo en asterisk 1.4.1. Gracias!
Comment by francisco
— 8 March 2007 @ 20:30
La variable SIP_CODEC está vacía salvo que tu le asignes algún valor.
Para averiguar qué codec se está usando en un canal, puedes utilizar la funcion CHANNEL:
exten => s,n,NoOp(${CHANNEL(audioreadformat)})
exten => s,n,NoOp(${CHANNEL(audionativeformat)})
exten => s,n,NoOp(${CHANNEL(audiowriteformat)})
audioreadformat format currently being read
audionativeformat format used natively for audio
audiowriteformat format currently being written
Saludos
Julián.
Comment by julianjm
— 9 March 2007 @ 8:11