From 241c5d358dc228badfcd832c64ff63ff9eb06674 Mon Sep 17 00:00:00 2001 From: Nanang Izzuddin Date: Mon, 2 Mar 2015 03:04:19 +0000 Subject: Fixed #1816: Restart media transport on following forked media. git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4985 74dad513-b988-da41-8d7b-12977e46ad98 --- pjsip/src/pjsua-lib/pjsua_media.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'pjsip/src/pjsua-lib/pjsua_media.c') diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c index 6b024a61..72553b47 100644 --- a/pjsip/src/pjsua-lib/pjsua_media.c +++ b/pjsip/src/pjsua-lib/pjsua_media.c @@ -2691,6 +2691,34 @@ pj_status_t pjsua_media_channel_update(pjsua_call_id call_id, pjmedia_transport_info tp_info; pjmedia_srtp_info *srtp_info; + if (call->inv->following_fork) { + /* Normally media transport will automatically restart + * itself (if needed, based on info from the SDP) in + * pjmedia_transport_media_start(), however in "following + * forked media" case (see #1644), we need to explicitly + * restart it as it cannot detect fork scenario from + * the SDP only. + */ + status = pjmedia_transport_media_stop(call_med->tp); + if (status != PJ_SUCCESS) { + PJ_PERROR(1,(THIS_FILE, status, + "pjmedia_transport_media_stop() failed " + "for call_id %d media %d", + call_id, mi)); + continue; + } + status = pjmedia_transport_media_create(call_med->tp, + tmp_pool, + 0, NULL, mi); + if (status != PJ_SUCCESS) { + PJ_PERROR(1,(THIS_FILE, status, + "pjmedia_transport_media_create() failed " + "for call_id %d media %d", + call_id, mi)); + continue; + } + } + /* Start/restart media transport based on info in SDP */ status = pjmedia_transport_media_start(call_med->tp, tmp_pool, local_sdp, -- cgit v1.2.3