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
changes/02/10902/1
Xiemin Chen 7 years ago committed by Joshua C. Colp
parent 6f5bc854ab
commit a526676836

@ -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);

@ -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);

Loading…
Cancel
Save