]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-7509: stop media on verto detach
authorAnthony Minessale <anthm@freeswitch.org>
Sat, 24 Jan 2015 08:47:17 +0000 (02:47 -0600)
committerMichael Jerris <mike@jerris.com>
Thu, 28 May 2015 17:46:55 +0000 (12:46 -0500)
src/include/switch_core_media.h
src/mod/endpoints/mod_verto/mod_verto.c
src/switch_core_media.c
src/switch_rtp.c

index 014f3d0c51791a48b8dc165fab0c1fb1d882775f..d213bb3b3d05254c5fa2b23f35849db8e789d73c 100644 (file)
@@ -319,6 +319,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_read_lock_unlock(switch_core_s
 #define switch_core_media_read_lock(_s, _t) switch_core_media_read_lock_unlock(_s, _t, SWITCH_TRUE) 
 #define switch_core_media_read_unlock(_s, _t) switch_core_media_read_lock_unlock(_s, _t, SWITCH_FALSE)
 
+SWITCH_DECLARE(void) switch_core_session_stop_media(switch_core_session_t *session);
 
 SWITCH_END_EXTERN_C
 #endif
index a808014b20ce22bd0a7e5779e116964b131966ac..ae6d9adaf3c5b52d41ccc82aa6c2cf86c1844189 100644 (file)
@@ -1210,7 +1210,7 @@ static void detach_calls(jsock_t *jsock)
                                switch_channel_hangup(tech_pvt->channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
                                continue;
                        }
-                       
+                       switch_core_session_stop_media(tech_pvt->session);
                        tech_pvt->detach_time = switch_epoch_time_now(NULL);
                        globals.detached++;
                        attach_wake();
index 53bee928813ea6d9f070b1d4349b5446816a6ea2..031b663b1d4dbd695eef1c21340864d06c46f251 100644 (file)
@@ -8995,6 +8995,36 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_codec_chosen(switch_core_sessi
        return SWITCH_STATUS_FALSE;
 }
 
+SWITCH_DECLARE(void) switch_core_session_stop_media(switch_core_session_t *session)
+{
+       switch_rtp_engine_t *a_engine, *v_engine;
+       switch_media_handle_t *smh;
+
+       switch_assert(session);
+
+       if (!(smh = session->media_handle)) {
+               return;
+       }
+
+       a_engine = &smh->engines[SWITCH_MEDIA_TYPE_AUDIO];
+       v_engine = &smh->engines[SWITCH_MEDIA_TYPE_VIDEO];
+
+       if (a_engine->rtp_session) {
+               switch_rtp_del_dtls(a_engine->rtp_session, DTLS_TYPE_RTP|DTLS_TYPE_RTCP);
+               switch_rtp_set_flag(a_engine->rtp_session, SWITCH_RTP_FLAG_PAUSE);
+               switch_rtp_set_flag(a_engine->rtp_session, SWITCH_RTP_FLAG_MUTE);
+       }
+
+       if (v_engine->rtp_session) {
+               switch_rtp_del_dtls(v_engine->rtp_session, DTLS_TYPE_RTP|DTLS_TYPE_RTCP);
+               switch_rtp_set_flag(v_engine->rtp_session, SWITCH_RTP_FLAG_PAUSE);
+               switch_rtp_set_flag(v_engine->rtp_session, SWITCH_RTP_FLAG_MUTE);
+       }
+
+       
+}
+
+
 
 //?
 SWITCH_DECLARE(void) switch_core_media_check_outgoing_proxy(switch_core_session_t *session, switch_core_session_t *o_session)
index 771a6bed46fa5529dd9482908afceb9919a82c9f..de540ae07f68ab907575b6148aaac7131e0bae60 100644 (file)
@@ -2974,6 +2974,14 @@ SWITCH_DECLARE(switch_status_t) switch_rtp_del_dtls(switch_rtp_t *rtp_session, d
                        stfu_n_reset(rtp_session->jb);
                }
 
+               if (rtp_session->vb) {
+                       switch_vb_reset(rtp_session->vb);
+               }
+
+               if (rtp_session->vbw) {
+                       switch_vb_reset(rtp_session->vbw);
+               }
+
        }
 
        if ((type & DTLS_TYPE_RTCP) && rtp_session->rtcp_dtls) {
@@ -3941,6 +3949,11 @@ SWITCH_DECLARE(switch_status_t) switch_rtp_activate_ice(switch_rtp_t *rtp_sessio
 
        if (proto == IPR_RTP) {
                ice = &rtp_session->ice;
+
+               rtp_session->flags[SWITCH_RTP_FLAG_PAUSE] = 0;
+               rtp_session->flags[SWITCH_RTP_FLAG_MUTE] = 0;
+               
+               switch_core_session_video_reinit(rtp_session->session);
                
                if (ice->ready) {
                        if (rtp_session->vb) {