Ahora, cuando un cliente quiere llamar a otro y
hay problemas de NAT y
es
necesario utilizar el rtpproxy. Lo que quiero es
que los rtps no fluyan
a
través del Asterisk, como en el diagrama de
abajo. ¿El canreinvite
resuelve
ésto? Lo pregúnto porque no estoy seguro del
funcionamiento del
rtpproxy,
¿soporta éste reinvites?
El canreinvite es una guarrada made in Asterisk. Consiste en lo siguiente:
- Recuerda que Asterisk es un B2BUA: cuando un tfno A llama a otro B ambos
registrados en Asterisk lo que realmente ocurre es que A llama a Asterisk
(ahí hay un diálogo) y Asterisk llama a B (otro diálogo) y hace de
pasarela.
- Si A y B tienen canreinvite=yes y no pones t,T,w o W en el "Dial" (luego
lo
comento mejor) entonces ocurre que:
- A llama a Asterisk, Asterisk llama a B, B contesta y Asterisk junta el
audio
(que pasa a través de él). De momento A no sabe de B y viceversa, el SDP
se
ha negociado para pasar por Asterisk pues ambos A y B **SOLO** han hablado
con Asterisk.
- Pero al instante Asterisk envía un nuevo INVITE (un re-INVITE porque es
un
INVITE in-dialog) tanto a A como a B. En el que envía a A pone en el SDP
que
envíe audio a la IP de B. En el que envía a B pone que envíe el audio
directamente a A.
¿Lo pillas? es como establecer primero dos llamadas con dos traficos de
audio
que se unen en Asterisk y posteriormente reorganizar SOLO el tráfico de
audio
(el SIP siempre sigue pasando por Asterisk) para que el RTP sea directo.
En caso de no ser necesario el rtpproxy, y
asterisk está de por medio,
los
rtps van a través del asterisk?
Ojo, lee este bug que reporté hace tiempo:
http://bugs.digium.com/view.php?id=11172
Aparece como cerrado...
Y entonces... no hay forma posible de hacer timeouts??? no me lo puedo
creer!
david