[jitsi-dev] Jitsi video bridge packet forwarding


#1

Hi,
We're building a Jitsi client and have had some issues with getting audio
and video to flow consistently. I'm trying to track down where the bridge
connects the incoming packets out to the receiver(s) and have had trouble
finding the exact spot.

I thought I was on track when I had narrowed things down to the
RtpConnectorInputStream->PushSourceStreamImpl->RtpTranslatorImpl->RtpConnectourOutputStream,
since the output stream there has support for multiple targets. I assumed
then that all downstream receivers of the same incoming stream were added
as targets there, but when running a 3 client call where one client's media
is going to the two others, I see the output stream only ever has a single
target.

Can anyone point me to where these connections are made?

Thanks,
brian


#2

Is there a simple example that illustrates how to integrate Jitsi
VideoBridge with WebRTC? I know Jitsi Meet is based on WebRTC but it is
not really a good short example for learning how to integrate WebRTC
applications with VideoBridge.

Thanks,
Jonathan Ekwempu

···

On Mon, Mar 23, 2015 at 4:19 PM, Brian Baldino <brian@highfive.com> wrote:

Hi,
We're building a Jitsi client and have had some issues with getting audio
and video to flow consistently. I'm trying to track down where the bridge
connects the incoming packets out to the receiver(s) and have had trouble
finding the exact spot.

I thought I was on track when I had narrowed things down to the
RtpConnectorInputStream->PushSourceStreamImpl->RtpTranslatorImpl->RtpConnectourOutputStream,
since the output stream there has support for multiple targets. I assumed
then that all downstream receivers of the same incoming stream were added
as targets there, but when running a 3 client call where one client's media
is going to the two others, I see the output stream only ever has a single
target.

Can anyone point me to where these connections are made?

Thanks,
brian

_______________________________________________
dev mailing list
dev@jitsi.org
Unsubscribe instructions and other list options:
http://lists.jitsi.org/mailman/listinfo/dev


#3

Hello Brian,

Hi,
We're building a Jitsi client and have had some issues with getting
audio and video to flow consistently. I'm trying to track down where
the bridge connects the incoming packets out to the receiver(s) and have
had trouble finding the exact spot.

I thought I was on track when I had narrowed things down to the
RtpConnectorInputStream->PushSourceStreamImpl->RtpTranslatorImpl->RtpConnectourOutputStream,
since the output stream there has support for multiple targets.

RTPTranslator's RTPConnector uses its own implementation of OutputStream (for data): org.jitsi.impl.neomedia.rtp.translator.OutputDataStreamImpl

OutputDataStreamImpl runs a thread that writes to the targets, which are contained in the 'streams' field.

I hope I understood your question correctly, sorry if that doesn't make sense.

Regards,
Boris

···

On 23/03/15 21:19, Brian Baldino wrote:


#4

Thanks Boris! I had added prints there and thought I saw that, even with a
3 person call where 2 participants were seeing the same person, there was
only ever a single a target in the outputstream. I'll double check based

Also, where is the higher level logic that actually decides that streams
should be wired to one another? Particularly for the initial video wiring?

-brian

···

on what you said.

On Wed, Mar 25, 2015 at 3:59 AM, Boris Grozev <boris@jitsi.org> wrote:

Hello Brian,

On 23/03/15 21:19, Brian Baldino wrote:

Hi,
We're building a Jitsi client and have had some issues with getting
audio and video to flow consistently. I'm trying to track down where
the bridge connects the incoming packets out to the receiver(s) and have
had trouble finding the exact spot.

I thought I was on track when I had narrowed things down to the
RtpConnectorInputStream->PushSourceStreamImpl->RtpTranslatorImpl->
RtpConnectourOutputStream,
since the output stream there has support for multiple targets.

RTPTranslator's RTPConnector uses its own implementation of OutputStream
(for data): org.jitsi.impl.neomedia.rtp.translator.OutputDataStreamImpl

OutputDataStreamImpl runs a thread that writes to the targets, which are
contained in the 'streams' field.

I hope I understood your question correctly, sorry if that doesn't make
sense.

Regards,
Boris

_______________________________________________
dev mailing list
dev@jitsi.org
Unsubscribe instructions and other list options:
http://lists.jitsi.org/mailman/listinfo/dev


#5

On the highest level this is in videobridge. There, a conference is represented in a Conference object, and it has a Content for each data type (audio, video, data). A Content has a set of Channels, one for each participant in the conference. Contents hold an RTPTranslator, while Channels hold a MediaStream. When a Channel is created, its MediaStream is set to use the Content's RTPTranslator instance.

Regards,
Boris

···

On 25/03/15 20:31, Brian Baldino wrote:

Thanks Boris! I had added prints there and thought I saw that, even
with a 3 person call where 2 participants were seeing the same person,
there was only ever a single a target in the outputstream. I'll double
check based on what you said.

Also, where is the higher level logic that actually decides that streams
should be wired to one another? Particularly for the initial video wiring?