bridge_softmix: Use MSID:LABEL metadata as the cloned stream's appendix

To avoid the stream name collide if there're more than one video track
in one client. If client has multi video tracks, the name of ast_stream
which represents each video track may be the same. Use the MSID:LABEL
here because it's identifiable.

ASTERISK-28196 #close
Reported-by: xiemchen

Change-Id: Ib62b2886e8d3a30e481d94616b0ceaeab68a870b
This commit is contained in:
Xiemin Chen
2018-12-16 20:43:42 +08:00
committed by Joshua C. Colp
parent ef43bd0b43
commit f6cf837aed
2 changed files with 17 additions and 3 deletions

View File

@@ -502,6 +502,7 @@ static int append_source_streams(struct ast_stream_topology *dest,
const struct ast_stream_topology *source)
{
int i;
const char *stream_identify;
for (i = 0; i < ast_stream_topology_get_count(source); ++i) {
struct ast_stream *stream;
@@ -513,8 +514,13 @@ static int append_source_streams(struct ast_stream_topology *dest,
continue;
}
stream_identify = ast_stream_get_metadata(stream, "MSID:LABEL");
if (!stream_identify) {
stream_identify = ast_stream_get_name(stream);
}
if (ast_asprintf(&stream_clone_name, "%s_%s_%s", SOFTBRIDGE_VIDEO_DEST_PREFIX,
channel_name, ast_stream_get_name(stream)) < 0) {
channel_name, stream_identify) < 0) {
return -1;
}
@@ -2186,6 +2192,7 @@ static void softmix_bridge_stream_topology_changed(struct ast_bridge *bridge, st
for (i = 0; i < ast_stream_topology_get_count(topology); ++i) {
struct ast_stream *stream = ast_stream_topology_get_stream(topology, i);
const char *stream_identify;
if (is_video_source(stream)) {
AST_VECTOR_APPEND(&media_types, AST_MEDIA_TYPE_VIDEO);
@@ -2202,7 +2209,12 @@ static void softmix_bridge_stream_topology_changed(struct ast_bridge *bridge, st
*/
ast_channel_unlock(participant->chan);
ast_bridge_channel_unlock(participant);
map_source_to_destinations(ast_stream_get_name(stream), ast_channel_name(participant->chan),
stream_identify = ast_stream_get_metadata(stream, "MSID:LABEL");
if (!stream_identify) {
stream_identify = ast_stream_get_name(stream);
}
map_source_to_destinations(stream_identify, ast_channel_name(participant->chan),
AST_VECTOR_SIZE(&media_types) - 1, &bridge->channels);
ast_bridge_channel_lock(participant);
ast_channel_lock(participant->chan);

View File

@@ -1157,7 +1157,9 @@ static void add_msid_to_stream(struct ast_sip_session *session,
}
if (ast_strlen_zero(session_media->label)) {
ast_uuid_generate_str(session_media->label, sizeof(session_media->label));
ast_uuid_generate_str(session_media->label, sizeof(session_media->label));
/* add for stream identification to replace stream_name */
ast_stream_set_metadata(stream, "MSID:LABEL", session_media->label);
}
snprintf(msid, sizeof(msid), "%s %s", session_media->mslabel, session_media->label);