Benny Prijono wrote: > > On Wed, Sep 10, 2008 at 11:02 AM, Pedro Gon?alves > <pedro.pandre at gmail.com <mailto:pedro.pandre at gmail.com>> wrote: > > Hi! > > With PJSUA such problem does not occour, which leads me to > conclude that it must be some problem in my application, somewhere > around the area where the INVITE is built / sent. > > > Yeah that's what I thought. > > > With your experience, do you have any idea why in this case the > candidates in use are not some of the candidates included in SDP > and why they are always 4000 (RTP) and 4001(RTCP)? > > > The default candidates (the c= and a=rtcp lines) are written to SDP by > pjmedia_endpt_create_sdp(), using the information from the sock_info > parameter. The sock_info normally comes from pjmedia_transport_get_info(). > > Looking at your log, I remember that I saw you call > pjmedia_endpt_create_sdp() in the beginning of the call, before the > ICE transport initialization completes. Or perhaps even before the ICE > transport is created at all! I suspect it's the later case, and in > this case, you need to check where do you get the sock_info from. It > could be that you put some hardcoded values there. > > The correct steps should be like this: > - create the ICE media transport > - wait until initialization completes (STUN resolution and TURN > allocation completes) > - call pjmedia_transport_get_info() to get the sock_info (the default > address) > - call pjmedia_endpt_create_sdp() > - then proceed with the rest as usual > (pjmedia_transport_media_create(), pjmedia_transport_encode_sdp(), > send the INVITE, etc.) Hi again! With your help, I solved the other problems I was talking about. However, I am now experiencing some problems when the answerer is sending the initial answer. Can you provide a similar description of the steps to perform, like in your answer above? At the moment I am doing the following: pjsip_tx_data *tdata; status = pjsip_inv_answer(SIPEngine::instance->g_inv, 200, NULL, NULL, &tdata); const pjmedia_sdp_session *remote_sdp; status = pjmedia_sdp_neg_get_active_remote(inv->neg, &remote_sdp); [steps similar to the ones you mentioned above] status = pjsip_inv_send_msg(inv, tdata); status = pjmedia_transport_media_start(my_transport, my_pool, local_sdp, remote_sdp, 0); Note: the local_sdp is obtained in a similar way to the one you described Is this correct? Many thanks Pedro Gon?alves