El Lunes, 25 de Febrero de 2008, David Villasmil escribió:
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
Saludos.
--
Iñaki Baz Castillo