wiki:0.9/Media_Interface_Change

Version 9 (modified by bennylp, 16 years ago) (diff)

--

Background

pjsua_call.c

Currently this is how the media channel interacts with SIP call in PJSUA-LIB.

pjsua_call_make_call() :
pjsua_call_on_incoming() :
pjsua_call_update() :
pjsua_call_reinvite() :
pjsua_call_on_rx_offer() :
pjsua_call_on_create_offer() :
pjsua_media_channel_init();
pjsua_media_channel_create_sdp(&local_sdp, rem_sdp);
pjsua_call_on_media_update() :
pjsua_media_channel_update();
pjsua_call_on_state_changed(DISCONNECTED) :
pjsua_call_on_media_update(HOLD) :
pjsua_media_channel_deinit();

pjsua_media.c

and this is the implementation of media channel functions above:

pjsua_media_channel_init() :
pjmedia_transport_srtp_create();
pjsua_media_channel_create_sdp() :
pjmedia_endpt_create_sdp();
pjmedia_transport_media_create();
pjsua_media_channel_update() :
pjmedia_transport_media_start();
pjmedia_session_create();
pjsua_media_channel_deinit() :
stop_media_session();
pjmedia_transport_media_stop();
pjmedia_transport_close(srtp);

New

New code in italics. Deleted code is in strike-through.

pjsua_call.c

This is the proposed interaction:

pjsua_call_make_call() :
pjsua_call_on_incoming() :
pjsua_media_channel_init();
pjsua_media_channel_create_sdp(&local_sdp, rem_sdp);
pjsua_media_channel_init(&local_sdp, rem_sdp);
pjsua_call_update() :
pjsua_call_reinvite() :
pjsua_call_on_rx_offer() :
pjsua_call_on_create_offer() :
pjsua_media_channel_init(&local_sdp, rem_sdp);
pjsua_media_channel_create_sdp(&local_sdp, rem_sdp);
pjsua_call_on_media_update() :
pjsua_media_channel_update();
pjsua_call_on_state_changed(DISCONNECTED) :
pjsua_call_on_media_update(HOLD) :
pjsua_media_channel_deinit();

pjsua_media.c

and this is the implementation of media channel functions above:

pjsua_media_channel_init(&local_sdp, rem_sdp) :
pjmedia_transport_srtp_create();
pjmedia_transport_media_create(local_sdp, rem_sdp);
pjmedia_transport_media_create(rem_sdp);
pjmedia_transport_encode_sdp(local_sdp, rem_sdp);
pjsua_media_channel_create_sdp(&local_sdp, rem_sdp) :
pjmedia_endpt_create_sdp();
pjmedia_transport_media_create(local_sdp, rem_sdp);
pjmedia_transport_encode_sdp(local_sdp, rem_sdp);
pjsua_media_channel_update() :
pjmedia_transport_media_start();
pjmedia_session_create();
pjsua_media_channel_deinit() :
stop_media_session();
pjmedia_transport_media_stop();
pjmedia_transport_close(srtp);

Changes in Transport

media_create()
  1. The semantic has changed:
    • previously this function is always called everytime we want to send offer
    • now this function is only called once when the transport needs to be created. Meaning once before call, and once the session is woken up after call hold. When media is already created and the application wants to send offer, it will just call encode_sdp() below without re-creating the media.
  2. The syntax has changed:
    • local_sdp parameter is removed. Local SDP should be populated in encode_sdp() instead. This is to make it consistent since SDP can be created without re-creating media.
New: encode_sdp()
  1. This function is used to modify local SDP with transport info. It can be called for different purposes below.
media_start()
  1. The syntax has changed:
    • the local SDP is now const. This is because it's useless to modify the local SDP there since the SDP has already been negotiated.

Sample: ICE processing with the new media framework

The new draft for ICE offer/answer processing:

ICE offer/answer flow chart

Attachments (1)

Download all attachments as: .zip