> 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.
Lo entiendo, un poco chapucero...
> 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