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 5ff46578aa
commit f2985e3106
9 changed files with 162 additions and 9 deletions

View File

@@ -301,6 +301,7 @@ enum ast_control_frame_type {
AST_CONTROL_MASQUERADE_NOTIFY = 34, /*!< A masquerade is about to begin/end. (Never sent as a frame but directly with ast_indicate_data().) */
AST_CONTROL_STREAM_TOPOLOGY_REQUEST_CHANGE = 35, /*!< Channel indication that a stream topology change has been requested */
AST_CONTROL_STREAM_TOPOLOGY_CHANGED = 36, /*!< Channel indication that a stream topology change has occurred */
AST_CONTROL_STREAM_TOPOLOGY_SOURCE_CHANGED = 37, /*!< Channel indication that one of the source streams has changed its source */
/*
* WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING

View File

@@ -109,6 +109,8 @@ struct ast_sip_session_media {
char mslabel[AST_UUID_STR_LEN];
/*! \brief Track label */
char label[AST_UUID_STR_LEN];
/*! \brief The underlying session has been changed in some fashion */
unsigned int changed;
};
/*!