Version 3 (modified by bennylp, 16 years ago) (diff) |
---|
Background
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(); } 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(); }
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); }
Reasons for Fix/Change?
The interface above has some drawbacks:
- The main drawback is it does not distinguish between a new/freshly created call and existing call (which needs updating the media because of re-INVITE/UPDATE), functions such as pjsua_call_on_create_offer() will actually re-initialize the media, hence causing problems such as ticket #525 (crash on UPDATE/re-INVITE).
- It requires media transports to be re-created during application startup and kept-alive throughout the application lifetime. The drawbacks of this are (as documented by ticket #539):
- it requires STUN and TURN transport to be kept-alive, which means it needs to send periodic keep-alive packets, and this is not good for battery consumption in mobile devices.
- it requires TURN long-term allocation, which will fail if the NAT/mapped public IP address mapping has changed.
- even when TURN is not used it may still fail when normal UDP media transport (i.e. not ICE) is used and the IP address (STUN or not) changes.
- it allocates a lot of resources when the number of max_calls is large.
New Design Specification
Distinguish Between Fresh Call and UPDATE/re-INVITE
pjsua_call_make_call(): pjsua_call_on_incoming(): { pjsua_media_channel_init(); pjsua_media_channel_create_sdp(); } pjsua_call_update(): pjsua_call_reinvite(): pjsua_call_on_rx_offer(): pjsua_call_on_create_offer(): { if (media==NULL) pjsua_media_channel_init(); pjsua_media_channel_create_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_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); }
Create Media Transport On-Demand
Media transport (including SRTP) will be created before call.
Attachments (1)
-
ICE_SDP.png
(14.6 KB) -
added by bennylp 16 years ago.
ICE offer/answer flow chart
Download all attachments as: .zip