diff options
author | Nanang Izzuddin <nanang@teluu.com> | 2008-08-26 16:51:28 +0000 |
---|---|---|
committer | Nanang Izzuddin <nanang@teluu.com> | 2008-08-26 16:51:28 +0000 |
commit | 8f801ac496cf978d41daf150c9d9b492b78cebac (patch) | |
tree | d9e33eee205b6c5110a077e9828e51c94b5011c5 /pjsip/src/pjsua-lib | |
parent | 472c21109bff70d66f59bd113b4031fde29a8a86 (diff) |
Ticket #602:
- Introduced new API pjmedia_rtp_session_init2() to enable intializing RTP session with non-default initial settings
- Updated stream so it can be created with non-default initial RTP settings.
- Updated pjsua-lib to make sure RTP timestamp and sequence contigue when stream session is restarted.
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@2241 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip/src/pjsua-lib')
-rw-r--r-- | pjsip/src/pjsua-lib/pjsua_call.c | 3 | ||||
-rw-r--r-- | pjsip/src/pjsua-lib/pjsua_media.c | 26 |
2 files changed, 29 insertions, 0 deletions
diff --git a/pjsip/src/pjsua-lib/pjsua_call.c b/pjsip/src/pjsua-lib/pjsua_call.c index 114da50d..737cc017 100644 --- a/pjsip/src/pjsua-lib/pjsua_call.c +++ b/pjsip/src/pjsua-lib/pjsua_call.c @@ -105,6 +105,9 @@ static void reset_call(pjsua_call_id id) call->session = NULL; call->audio_idx = -1; call->ssrc = pj_rand(); + call->rtp_tx_seq = 0; + call->rtp_tx_ts = 0; + call->rtp_tx_seq_ts_set = 0; call->xfer_sub = NULL; call->last_code = (pjsip_status_code) 0; call->conf_slot = PJSUA_INVALID_ID; diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c index 69314d30..6b0d2f63 100644 --- a/pjsip/src/pjsua-lib/pjsua_media.c +++ b/pjsip/src/pjsua-lib/pjsua_media.c @@ -1158,6 +1158,23 @@ static void stop_media_session(pjsua_call_id call_id) } if (call->session) { + pjmedia_rtcp_stat stat; + + if (pjmedia_session_get_stream_stat(call->session, + call->audio_idx, + &stat) == PJ_SUCCESS) + { + /* Save RTP timestamp & sequence, so when media session is + * restarted, those values will be restored as the initial + * RTP timestamp & sequence of the new media session. So in + * the same call session, RTP timestamp and sequence are + * guaranteed to be contigue. + */ + call->rtp_tx_seq_ts_set = 1 | (1 << 1); + call->rtp_tx_seq = stat.rtp_tx_last_seq; + call->rtp_tx_ts = stat.rtp_tx_last_ts; + } + if (pjsua_var.ua_cfg.cb.on_stream_destroyed) { pjsua_var.ua_cfg.cb.on_stream_destroyed(call_id, call->session, 0); } @@ -1322,6 +1339,15 @@ pj_status_t pjsua_media_channel_update(pjsua_call_id call_id, /* Set SSRC */ si->ssrc = call->ssrc; + /* Set RTP timestamp & sequence, normally these value are intialized + * automatically when stream session created, but for some cases (e.g: + * call reinvite, call update) timestamp and sequence need to be kept + * contigue. + */ + si->rtp_ts = call->rtp_tx_ts; + si->rtp_seq = call->rtp_tx_seq; + si->rtp_seq_ts_set = call->rtp_tx_seq_ts_set; + /* Create session based on session info. */ status = pjmedia_session_create( pjsua_var.med_endpt, &sess_info, &call->med_tp, |