<div dir="ltr"><div dir="ltr"><div dir="ltr">First I add a new function compare_topology() which called by handle_negotinated_sdp to check whether there's a new msid in the pending_media_state to fire the 

AST_CONTROL_STREAM_TOPOLOGY_SOURCE_CHANGED event</div><div dir="ltr"><div><br></div><div><i>    </i><b><i>changed |= compare_topology(session->pending_media_state->topology, session->active_media_state->topology);</i></b></div><div><br></div><div>Then I add following code in sfu_topologies_on_source_change() to copy the new stream topology to softmix_channel->topology for the next usage.</div><div><br></div><div><b><i>+       sc = source->tech_pvt;<br>+<br>        ast_channel_lock(source->chan);<br>        res = append_source_streams(source_video, ast_channel_name(source->chan),<br>                bridge->softmix.send_sdp_label ? ast_channel_uniqueid(source->chan) : NULL,<br>                ast_channel_get_stream_topology(source->chan));<br>+<br>+    if (NULL != sc->topology)<br>+        ast_stream_topology_free(sc->topology);<br>+       sc->topology = ast_stream_topology_clone(ast_channel_get_stream_topology(source->chan));<br>+<br>        ast_channel_unlock(source->chan);<br>-       if (res) {<br>+<br>+       if (res || !sc->topology) {<br>                goto cleanup;<br>        }</i></b><br></div><div><br></div><div>Then it seems to work for the dynamically stream add.</div><div><br></div><div><font color="#ff0000">How about the dynamically stream removed</font>? If I want to remove a stream from the client, can I simply mark the stream as "a=inactive" in the offer sdp?</div><div><br></div><div>Sincerely</div><div>Xiemin</div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Joshua C. Colp <<a href="mailto:jcolp@digium.com" target="_blank">jcolp@digium.com</a>> 于2019年5月10日周五 上午12:55写道:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Thu, May 9, 2019, at 1:46 PM, Xiemin Chen wrote:<br>
> A cannot see B's new video track,<br>
> A is not trigged a renegotiation progress after B's new video track was added.<br>
<br>
The code likely is not queueing up a AST_CONTROL_STREAM_TOPOLOGY_CHANGED frame then. That informs the bridge code the topology has changed and it needs to update everything. The bridge_softmix implementation isn't really written to handle this case though, so it still wouldn't reinvite all the other parties. Trying the AST_CONTROL_STREAM_TOPOLOGY_SOURCE_CHANGED type like you mentioned before MAY work, although it also wasn't written for this specific case.<br>
<br>
-- <br>
Joshua C. Colp<br>
Digium - A Sangoma Company | Senior Software Developer<br>
445 Jan Davis Drive NW - Huntsville, AL 35806 - US<br>
Check us out at: <a href="http://www.digium.com" rel="noreferrer" target="_blank">www.digium.com</a> & <a href="http://www.asterisk.org" rel="noreferrer" target="_blank">www.asterisk.org</a><br>
<br>
-- <br>
_____________________________________________________________________<br>
-- Bandwidth and Colocation Provided by <a href="http://www.api-digital.com" rel="noreferrer" target="_blank">http://www.api-digital.com</a> --<br>
<br>
asterisk-dev mailing list<br>
To UNSUBSCRIBE or update options visit:<br>
   <a href="http://lists.digium.com/mailman/listinfo/asterisk-dev" rel="noreferrer" target="_blank">http://lists.digium.com/mailman/listinfo/asterisk-dev</a></blockquote></div></div>