Re: audiomixer usage

Pradeep Acharya via gstreamer-devel <[email protected]> Thu, 26 Dec 2024 10:51:23 +0530
Newsgroups gmane.comp.video.gstreamer.devel
Message-ID <CAMMOExNuoT3wSoqxzb9r3f8RcbmMyQfZKWmEjz3AVyeUEEK_xA@mail.gmail.com>
--000000000000108937062a258595
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Hi Michael,

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.

Regards
Pradeep

On Wed, Dec 25, 2024 at 11:54=E2=80=AFPM Michael Gruner <michael.gruner@rid=
gerun.com>
wrote:

> 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 Un=
it
> or Mesh. I know this is not was what you asked, but I hope it eases your
> research.
>
>
> https://medium.com/@toshvelaga/webrtc-architectures-mesh-mcu-and-sfu-12c5=
02274d7
>
> Now to your question, the MCU approach would be to have one audiomixer pe=
r
> 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.
>
> 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, agai=
n,
> may be manageable with audio only.
>
> If, for whatever reason, you need to filter out using DSP techniques, you
> may look into echo cancellation. Check the work by Nicholas in
>
>
> https://www.collabora.com/news-and-blog/blog/2016/07/08/gstreamer-echo-ca=
nceller/
>
> Note that this is not quite the intended purpose and, personally, is not
> the approach I would go for.
>
> Finally, please recall that you'll likely get more answers in the
> gstreamer discourse:
>
> https://discourse.gstreamer.org/
>
> Michael
> www.ridgerun.com
>
> On 25 Dec 2024, at 07:27, Pradeep Acharya via gstreamer-devel <
> [email protected]> wrote:
>
> =EF=BB=BF
> Hi All,
>
> I'm new to developing audio conferencing solutions on server side and
> implementing the same using audiomixer plugin. The output of the mixer ha=
s
> audio mixed that is received from all participants. The mixed audio has t=
o
> be transmitted to all participants.  Before transmitting mixed audio,
> participants' audio has to be filtered out from the output generated by t=
he
> audio mixer and sent to that participant. Is there any plugin that checks
> and filters out samples from the output generated by audiomixer plugin? I=
f
> there is no such plugin , kindly let me know other possible solutions for
> this.
>
> Thanks & Regards
>
>
>
>

--000000000000108937062a258595
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div>Hi Michael,</div><div><br></div><div>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 d=
o will be reduced . I was thinking of optimizing the number of audio mixers=
 used in MCU architecture .From your explanation , i get that AEC=C2=A0 nee=
ds to be used to cut off participant&#39;s own audio. Again, this method wo=
uld impose using AEC on each client.=C2=A0 <br></div><div><br></div><div>Re=
gards</div><div>Pradeep<br></div></div><br><div class=3D"gmail_quote gmail_=
quote_container"><div dir=3D"ltr" class=3D"gmail_attr">On Wed, Dec 25, 2024=
 at 11:54=E2=80=AFPM Michael Gruner &lt;<a href=3D"mailto:michael.gruner@ri=
dgerun.com">[email protected]</a>&gt; wrote:<br></div><blockquote=
 class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px so=
lid rgb(204,204,204);padding-left:1ex"><div dir=3D"auto">Hi there, happy ho=
lidays.<div><br></div><div>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, b=
ut I hope it eases your research.</div><div><br></div><div><div style=3D"di=
splay:block"><a href=3D"https://medium.com/@toshvelaga/webrtc-architectures=
-mesh-mcu-and-sfu-12c502274d7" target=3D"_blank">https://medium.com/@toshve=
laga/webrtc-architectures-mesh-mcu-and-sfu-12c502274d7</a><br></div></div><=
div><br></div><div>Now to your question, the MCU approach would be to have =
one audiomixer per client. Each client audiomixer will mix all the other ch=
annels, except itself. This is easy to implement, but will load tremendousl=
y the server. It might not more manageable with audio only.</div><div><br><=
/div><div>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 cl=
ients. These are then mixed locally by each client. This is very lightweigh=
t in the server, but consumes exponentially more network bandwidth which, a=
gain, may be manageable with audio only.=C2=A0</div><div><br></div><div>If,=
 for whatever reason, you need to filter out using DSP techniques, you may =
look into echo cancellation. Check the work by Nicholas in</div><div><br></=
div><div><a href=3D"https://www.collabora.com/news-and-blog/blog/2016/07/08=
/gstreamer-echo-canceller/" target=3D"_blank">https://www.collabora.com/new=
s-and-blog/blog/2016/07/08/gstreamer-echo-canceller/</a></div><div><div sty=
le=3D"display:block"><br></div><div style=3D"display:block">Note that this =
is not quite the intended purpose and, personally, is not the approach I wo=
uld go for.</div></div><div><br></div><div>Finally, please recall that you&=
#39;ll likely get more answers in the gstreamer discourse:</div><div><br></=
div><div><div style=3D"display:block"><a href=3D"https://discourse.gstreame=
r.org/" target=3D"_blank">https://discourse.gstreamer.org/</a></div></div><=
div><br id=3D"m_1543562250146385375lineBreakAtBeginningOfSignature"><div di=
r=3D"ltr">Michael</div><div dir=3D"ltr"><a href=3D"http://www.ridgerun.com"=
 target=3D"_blank">www.ridgerun.com</a></div><div dir=3D"ltr"><br><blockquo=
te type=3D"cite">On 25 Dec 2024, at 07:27, Pradeep Acharya via gstreamer-de=
vel &lt;<a href=3D"mailto:[email protected]" target=3D"=
_blank">[email protected]</a>&gt; wrote:<br><br></block=
quote></div><blockquote type=3D"cite"><div dir=3D"ltr">=EF=BB=BF<div dir=3D=
"ltr"><div>Hi All,</div><div><br></div><div>I&#39;m new to developing audio=
 conferencing solutions on server side and implementing the same using audi=
omixer plugin. The output of the mixer has audio mixed that is received fro=
m all participants. The mixed audio has to be transmitted to all participan=
ts.=C2=A0 Before transmitting mixed audio, participants&#39; audio has to b=
e filtered out from the output generated by the audio mixer and sent to tha=
t participant. Is there any plugin that checks and filters out samples from=
 the output generated by audiomixer plugin? If there is no such plugin , ki=
ndly let me know other possible solutions for this.</div><div><br></div><di=
v>Thanks &amp; Regards</div><div><br></div><div><br></div><div></div><div><=
br></div></div>
</div></blockquote></div></div></blockquote></div>

--000000000000108937062a258595--