<p>That's an interesting topic, as the number of participants increases the proportion of redundant "participant-to-participant" mixing will also rise, eg with participants 1 2 3 4 you'll get such a set of combinations:</p>
<p>1 -> 2 3 4
2 -> 1 3 4
3 -> 1 2 4
4 -> 1 2 3</p>
<p>In this case we see that for instance the audio for participants 1 and 2 gets mixed twice together before being mixed with a final, different participant. (I'm sure there's a mathematical tool to calculate the amount of redundancy here btw, if anyone knows?)</p>
<p>I suppose an application could construct with some care an arrangement of sequential audiomixers / tees to remove this redundancy.</p>
<p>As for getting audiomixer to support this optimization out of the box, the problem you'll encounter is that audiomixer is N sink pads to 1 source pad, which doesn't lend itself well to such a design, you'd want a N to N audiomixer instead.</p>
<p>Cheers</p>
<p>On Thu, 2024-12-26 at 10:51 +0530, Pradeep Acharya via gstreamer-devel wrote:</p>
<blockquote type="cite">
<p>Hi Michael,</p>
<p>Thanks a lot for the quick reply . To keep the server load less, SFU is used for Video and MCU for audio so that the number of audio decoding that the client has to do will be reduced . I was thinking of optimizing the number of audio mixers used in MCU architecture .From your explanation , i get that AEC needs to be used to cut off participant's own audio. Again, this method would impose using AEC on each client. </p>
<p>Regards<br />
Pradeep</p>
<p>On Wed, Dec 25, 2024 at 11:54 PM Michael Gruner <<a href="mailto:michael.gruner@ridgerun.com">michael.gruner@ridgerun.com</a>> wrote:</p>
<blockquote type="cite">
<p>Hi there, happy holidays.
What you describe is a well known topology named MCU: Multipoint Control Unit. There are others worth exploring, like SFU: Selective Forwarding Unit or Mesh. I know this is not was what you asked, but I hope it eases your research.</p>
<p><a href="https://medium.com/@toshvelaga/webrtc-architectures-mesh-mcu-and-sfu-12c502274d7">https://medium.com/@toshvelaga/webrtc-architectures-mesh-mcu-and-sfu-12c502274d7</a></p>
<p>Now to your question, the MCU approach would be to have one audiomixer per client. Each client audiomixer will mix all the other channels, except itself. This is easy to implement, but will load tremendously the server. It might not more manageable with audio only.</p>
<p>The SFU approach would be not to use an audiomixer in the server at all. Each client would receive N network stream, each for every other clients. These are then mixed locally by each client. This is very lightweight in the server, but consumes exponentially more network bandwidth which, again, may be manageable with audio only. </p>
<p>If, for whatever reason, you need to filter out using DSP techniques, you may look into echo cancellation. Check the work by Nicholas in</p>
<p><a href="https://www.collabora.com/news-and-blog/blog/2016/07/08/gstreamer-echo-canceller/">https://www.collabora.com/news-and-blog/blog/2016/07/08/gstreamer-echo-canceller/</a></p>
<p>Note that this is not quite the intended purpose and, personally, is not the approach I would go for.</p>
<p>Finally, please recall that you'll likely get more answers in the gstreamer discourse:</p>
<p><a href="https://discourse.gstreamer.org/">https://discourse.gstreamer.org/</a></p>
<p>Michael
<a href="http://www.ridgerun.com">www.ridgerun.com</a></p>
<blockquote type="cite">
<p>On 25 Dec 2024, at 07:27, Pradeep Acharya via gstreamer-devel <<a href="mailto:gstreamer-devel@lists.freedesktop.org">gstreamer-devel@lists.freedesktop.org</a>> wrote:</p>
</blockquote>
<blockquote type="cite">
<p>Hi All,</p>
<p>I'm new to developing audio conferencing solutions on server side and implementing the same using audiomixer plugin. The output of the mixer has audio mixed that is received from all participants. The mixed audio has to be transmitted to all participants. Before transmitting mixed audio, participants' audio has to be filtered out from the output generated by the audio mixer and sent to that participant. Is there any plugin that checks and filters out samples from the output generated by audiomixer plugin? If there is no such plugin , kindly let me know other possible solutions for this.</p>
<p>Thanks & Regards</p>
</blockquote>
</blockquote>
</blockquote>