summaryrefslogtreecommitdiff
path: root/pjsip/src/pjsua-lib/pjsua_media.c
diff options
context:
space:
mode:
authorNanang Izzuddin <nanang@teluu.com>2015-03-02 03:04:19 +0000
committerNanang Izzuddin <nanang@teluu.com>2015-03-02 03:04:19 +0000
commit241c5d358dc228badfcd832c64ff63ff9eb06674 (patch)
treec7215427ab0dedfccc9faf49054e8e347165802e /pjsip/src/pjsua-lib/pjsua_media.c
parentf02b93fdb8602996b598e39f4b4b099f5514c066 (diff)
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
Diffstat (limited to 'pjsip/src/pjsua-lib/pjsua_media.c')
-rw-r--r--pjsip/src/pjsua-lib/pjsua_media.c28
1 files changed, 28 insertions, 0 deletions
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,