Pedro Gonçalves
2008-08-13 10:27:01 UTC
Hi!
I already managed to use ICE to establish a call between a client behind
symmetric NAT and a client directly (no NAT) connected to my SIP Server,
which proves that ICE is working fine :)
However, I have a problem when ICE can't establish a connection (ex:
Port Restricted Cone NAT to Symmetric NAT).
I think I am missing something, because the media (RTP and RTCP) is not
starting in caller when the initial answer (200 OK INVITE) is received
by the caller.
As I am using PJSIP at a low level, the process flow is like this:
[When starting a call]
== Caller ==
pjmedia_ice_create()
pjmedia_transport_media_create()
pjmedia_transport_encode_sdp()
pjsip_inv_create_uac()
pjsip_inv_invite()
pjsip_inv_send_msg()
[INVITE goes to answerer]
== Answerer ==
pjsip_inv_answer()
pjmedia_ice_create()
pjmedia_transport_media_create()
pjmedia_transport_encode_sdp()
pjsip_inv_send_msg()
pjmedia_transport_media_start()
[200 OK goes to caller]
== Caller ==
on_media_update():
pjmedia_transport_media_start()
on_ice_complete():
pjmedia_endpt_create_sdp()
pjmedia_transport_encode_sdp()
pjsip_inv_reinvite()
pjsip_inv_send_msg()
(...)
With this process flow, I can see that the default candidates (relayed
candidates) are chosen and negotiated; I can even see the media flow
going from answerer to relay sever to caller, but not the other way
around (caller to relay server to answerer).
Any idea why?
Am I missing something?
Cheers
Pedro Gonçalves
I already managed to use ICE to establish a call between a client behind
symmetric NAT and a client directly (no NAT) connected to my SIP Server,
which proves that ICE is working fine :)
However, I have a problem when ICE can't establish a connection (ex:
Port Restricted Cone NAT to Symmetric NAT).
I think I am missing something, because the media (RTP and RTCP) is not
starting in caller when the initial answer (200 OK INVITE) is received
by the caller.
As I am using PJSIP at a low level, the process flow is like this:
[When starting a call]
== Caller ==
pjmedia_ice_create()
pjmedia_transport_media_create()
pjmedia_transport_encode_sdp()
pjsip_inv_create_uac()
pjsip_inv_invite()
pjsip_inv_send_msg()
[INVITE goes to answerer]
== Answerer ==
pjsip_inv_answer()
pjmedia_ice_create()
pjmedia_transport_media_create()
pjmedia_transport_encode_sdp()
pjsip_inv_send_msg()
pjmedia_transport_media_start()
[200 OK goes to caller]
== Caller ==
on_media_update():
pjmedia_transport_media_start()
on_ice_complete():
pjmedia_endpt_create_sdp()
pjmedia_transport_encode_sdp()
pjsip_inv_reinvite()
pjsip_inv_send_msg()
(...)
With this process flow, I can see that the default candidates (relayed
candidates) are chosen and negotiated; I can even see the media flow
going from answerer to relay sever to caller, but not the other way
around (caller to relay server to answerer).
Any idea why?
Am I missing something?
Cheers
Pedro Gonçalves