summaryrefslogtreecommitdiff
path: root/bridges
diff options
context:
space:
mode:
authorMatt Jordan <mjordan@digium.com>2016-11-04 15:33:35 -0500
committerMatt Jordan <mjordan@digium.com>2016-11-04 15:50:10 -0500
commitfb17b630a5992a920dd2d81d6f8c1183c29fe353 (patch)
treef258f69eb7fcb2157e6ff5dc8a681bac0f392ef2 /bridges
parentbf01ff53f8d93d637981720331405e56f0b3b118 (diff)
bridges/bridge_softmix: Remove SSRC changes on join/leave; update video source
WebRTC clients really, really want to know the SSRC of the media they're getting. Changing the SSRC is generally not a good thing. bridge_softmix, starting in Asterisk 12, started changing the SSRC of parties as they joined or left the bridge. With most phones, this isn't a problem: phones just play back the stream they're getting. With WebRTC clients, however, the SSRC is tied to a media stream that may be negotiated. When a new SSRC just shows up, the media can be dropped. As it turns out, the SSRC change shouldn't even be necessary. From the perspective of the client, it's still talking to Asterisk with the same media stream: why indicate that the far party has suddenly changed to a different source of media? This patch opts to just remove the SSRC changes. With this patch, video clients that join/leave a softmix bridge actually get the video stream instead of freaking out. ASTERISK-26555 Change-Id: I27fec098b32e7c8718b4b65f3fd5fa73527968bf
Diffstat (limited to 'bridges')
-rw-r--r--bridges/bridge_softmix.c28
1 files changed, 9 insertions, 19 deletions
diff --git a/bridges/bridge_softmix.c b/bridges/bridge_softmix.c
index 31b72265f..a0b147497 100644
--- a/bridges/bridge_softmix.c
+++ b/bridges/bridge_softmix.c
@@ -440,21 +440,6 @@ static void softmix_bridge_unsuspend(struct ast_bridge *bridge, struct ast_bridg
}
}
-/*!
- * \internal
- * \brief Indicate a source change to the channel.
- * \since 12.0.0
- *
- * \param bridge_channel Which channel source is changing.
- *
- * \retval 0 on success.
- * \retval -1 on error.
- */
-static int softmix_src_change(struct ast_bridge_channel *bridge_channel)
-{
- return ast_bridge_channel_queue_control_data(bridge_channel, AST_CONTROL_SRCCHANGE, NULL, 0);
-}
-
/*! \brief Function called when a channel is joined into the bridge */
static int softmix_bridge_join(struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel)
{
@@ -471,8 +456,6 @@ static int softmix_bridge_join(struct ast_bridge *bridge, struct ast_bridge_chan
return -1;
}
- softmix_src_change(bridge_channel);
-
/* Can't forget the lock */
ast_mutex_init(&sc->lock);
@@ -499,8 +482,6 @@ static void softmix_bridge_leave(struct ast_bridge *bridge, struct ast_bridge_ch
}
bridge_channel->tech_pvt = NULL;
- softmix_src_change(bridge_channel);
-
/* Drop mutex lock */
ast_mutex_destroy(&sc->lock);
@@ -694,6 +675,15 @@ static int softmix_bridge_write_control(struct ast_bridge *bridge, struct ast_br
* XXX Softmix needs to use channel roles to determine what to
* do with control frames.
*/
+
+ switch (frame->subclass.integer) {
+ case AST_CONTROL_VIDUPDATE:
+ ast_bridge_queue_everyone_else(bridge, NULL, frame);
+ break;
+ default:
+ break;
+ }
+
return 0;
}