miércoles, 16 de abril de 2014

Resolviendo un problema de audio en un solo sentido llamadas entrantes Incoming Calls en Asterisk.


Hola Vengo a contar como solucionar un problema que se nos presento en el trabajo con un cliente.

Explicación:

Actualmente estoy saliendo a la Red Telefónica Básica (RTB), red de telefonía de toda la vida, por un proveedor voip.

Para enrutar llamadas por este, no hubo más problemas. Registrar nuestro asterisk con el proveedor, añadir un canal para este en sip.conf y crear un dialplan para sacar llamadas por ahí y FIN.

El problema no era ese, el problema era al intentar recibir llamadas. Tengo varios números DID asignados a varias extensiones de mi asterisk con lo cual es fundamental que puedan entrar llamadas, y estas lo hacían, pero solo tenia audio en 1 sentido (de dentro hacia fuera), el usuario que me llamaba yo no lo podía escuchar, el a mi perfectamente…
*Problema de NAT no era, ya que estaba trabajando fuera de un entorno con NAT
**por lo menos por mi parte, parece ser que por la del operador de números DID no
Lo primero que hice en este caso fue entrar a la consola de asterik:
asterisk -r
Y hacer un debug del protocolo RTP para ver que es lo que estaba pasando con los paquetes….
rtp set debug on
He aquí el resultado:
Got RTP packet from 192.168.10.15:16406 (type 08, seq 014191, ts 392580221, len 000160)
Sent RTP packet to 46.19.209.78:17962 (type 08, seq 026450, ts 392580216, len 000160)
Got RTP packet from 192.168.10.15:16406 (type 08, seq 014192, ts 392580381, len 000160)
Sent RTP packet to 46.19.209.78:17962 (type 08, seq 026451, ts 392580376, len 000160)
Got RTP packet from 192.168.10.15:16406 (type 08, seq 014193, ts 392580541, len 000160)
Sent RTP packet to 46.19.209.78:17962 (type 08, seq 026452, ts 392580536, len 000160)
Got RTP packet from 192.168.10.15:16406 (type 08, seq 014194, ts 392580701, len 000160)
Sent RTP packet to 46.19.209.78:17962 (type 08, seq 026453, ts 392580696, len 000160)
Got RTP packet from 192.168.10.15:16406 (type 08, seq 014195, ts 392580861, len 000160)
Sent RTP packet to 46.19.209.78:17962 (type 08, seq 026454, ts 392580856, len 000160)
Got RTP packet from 192.168.10.15:16406 (type 08, seq 014196, ts 392581021, len 000160)
Sent RTP packet to 46.19.209.78:17962 (type 08, seq 026455, ts 392581016, len 000160)
Got RTP packet from 192.168.10.15:16406 (type 08, seq 014197, ts 392581181, len 000160)
Sent RTP packet to 46.19.209.78:17962 (type 08, seq 026456, ts 392581176, len 000160)
Got RTP packet from 192.168.10.15:16406 (type 08, seq 014198, ts 392581341, len 000160)
Sent RTP packet to 46.19.209.78:17962 (type 08, seq 026457, ts 392581336, len 000160)
Got RTP packet from 192.168.10.15:16406 (type 08, seq 014199, ts 392581501, len 000160)
Sent RTP packet to 46.19.209.78:17962 (type 08, seq 026458, ts 392581496, len 000160)
Got RTP packet from 192.168.10.15:16406 (type 08, seq 014200, ts 392581661, len 000160)
Sent RTP packet to 46.19.209.78:17962 (type 08, seq 026459, ts 392581656, len 000160)
Me puse a leer de cabo a rabo el fichero sip.conf que trae asterisk de ejemplo y me encuentro con:
;directmedia=yes ; Asterisk by default tries to redirect the
; RTP media stream to go directly from
; the caller to the callee. Some devices do not
; support this (especially if one of them is behind a NAT).
; The default setting is YES. If you have all clients
; behind a NAT, or for some other reason want Asterisk to
; stay in the audio path, you may want to turn this off.
Nos dice que asterisk querrá establecer una conexión DIRECTA con el usuario que llama y el usuario que contesta a la llamada. Esto no es soportable por algunos dispositivos,especialmente si están detrás de NAT…….. Esta opción es interesante cuando nos encontramos en un entorno LAN sin dispositivos NAT por en medio, ya que la comunicación se hará directamente entre los 2 interlocutores. Si hay dispositivos NAT por en medio es MUY recomendable desactivar dicha opción. (por defecto directmedia esta en YES)

Ahi tenia la respuesta…directmedia estaba en yes por defecto…. fui al fichero sip.conf y añadí:
[general]
directmedia=off
Reinicio asterisk con:
asterisk -r
core restart now
……..Realizo la llamada desde el exterior, descuelgo el teléfono que suena y holalalal!!!!! funciona el audio en 2 sentidos..
Si ahora hacemos un: debug de rtp observamos lo siguiente….
Sent RTP P2P packet to 46.19.209.76:19818 (type 08, len 000160)
Sent RTP P2P packet to 192.168.10.15:16410 (type 08, len 000160)
Sent RTP P2P packet to 46.19.209.76:19818 (type 08, len 000160)
Sent RTP P2P packet to 192.168.10.15:16410 (type 08, len 000160)
Sent RTP P2P packet to 46.19.209.76:19818 (type 08, len 000160)
Sent RTP P2P packet to 192.168.10.15:16410 (type 08, len 000160)
Sent RTP P2P packet to 46.19.209.76:19818 (type 08, len 000160)
Sent RTP P2P packet to 192.168.10.15:16410 (type 08, len 000160)
Sent RTP P2P packet to 46.19.209.76:19818 (type 08, len 000160)
Sent RTP P2P packet to 192.168.10.15:16410 (type 08, len 000160)
Sent RTP P2P packet to 46.19.209.76:19818 (type 08, len 000160)
Sent RTP P2P packet to 192.168.10.15:16410 (type 08, len 000160)
Sent RTP P2P packet to 46.19.209.76:19818 (type 08, len 000160)
Sent RTP P2P packet to 192.168.10.15:16410 (type 08, len 000160)
Sent RTP P2P packet to 46.19.209.76:19818 (type 08, len 000160)
Sent RTP P2P packet to 192.168.10.15:16410 (type 08, len 000160)
Sent RTP P2P packet to 46.19.209.76:19818 (type 08, len 000160)
Sent RTP P2P packet to 192.168.10.15:16410 (type 08, len 000160)
Sent RTP P2P packet to 46.19.209.76:19818 (type 08, len 000160)
Sent RTP P2P packet to 192.168.10.15:16410 (type 08, len 000160)
Sent RTP P2P packet to 46.19.209.76:19818 (type 08, len 000160)
Sent RTP P2P packet to 192.168.10.15:16410 (type 08, len 000160)
Sent RTP P2P packet to 46.19.209.76:19818 (type 08, len 000160)
Sent RTP P2P packet to 192.168.10.15:16410 (type 08, len 000160)
Esto es todo por hoy, espero que mis cabezazos contra la pared impidan que otros se los de por esto jeje.

Fuente:
http://www.monovarlinux.org/?p=69

Un saludo.
Angel J. Reynoso
kp01 
Tel.: 829-997-4870
kp01aj@gmail.com

1 comentario: