bridge: Change participant SFU streams when source streams change.

Some endpoints do not like a stream being reused for a new
media stream. The frame/jitterbuffer can rely on underlying
attributes of the media stream in order to order the packets.
When a new stream takes its place without any notice the
buffer can get confused and the media ends up getting dropped.

This change uses the SSRC change to determine that a new source
is reusing an existing stream and then bridge_softmix renegotiates
each participant such that they see a new media stream. This
causes the frame/jitterbuffer to start fresh and work as expected.

ASTERISK-27277

Change-Id: I30ccbdba16ca073d7f31e0e59ab778c153afae07
This commit is contained in:
Joshua Colp
2017-09-16 11:19:59 -03:00
parent 037f85d5ab
commit 693c06f8a3
9 changed files with 162 additions and 9 deletions

View File

@@ -342,6 +342,9 @@ static void print_frame(struct ast_frame *frame)
case AST_CONTROL_STREAM_TOPOLOGY_CHANGED:
ast_verbose("SubClass: STREAM_TOPOLOGY_CHANGED\n");
break;
case AST_CONTROL_STREAM_TOPOLOGY_SOURCE_CHANGED:
ast_verbose("SubClass: STREAM_TOPOLOGY_SOURCE_CHANGED\n");
break;
case AST_CONTROL_STREAM_STOP:
ast_verbose("SubClass: STREAM_STOP\n");
break;