I’ve just put up a PR to merge the “jvb 2.0” code that’s been discussed for a while now into master in the jitsi-videobridge repo here. The main goal of this work was to clean up tech debt that had accumulated over the years to put us in a better place for future work (performance improvements, features, etc.) and, from some initial testing, we have already seen some good performance improvements as part of the rewrite. We no longer* rely on the libjitsi dependency, which has grown quite large as it is used by many Jitsi components, and instead now rely on a new repo jitsi-media-transform which is targeted at the bridge’s use case. We also rely on another new library, jitsi-rtp, which handles RTP/RTCP parsing and serialization for the bridge. @Boris_Grozev recently gave a talk which discusses the new bridge and some of its architecture at commcon here. I’ve also included a couple diagrams at the bottom of this post.
Next step is we’ll be deploying to beta.meet.jit.si for more testing and we’ll be addressing some of the known issues. Then once things look good we’ll deploy to meet.jit.si, which is when we’ll consider this “fully stable”. The old bridge code can be found on the jvb_1.0 branch.
The following features were deprecated and no longer supported in jvb 2.0 as part of this rewrite:
- non-rtcp mux
(because the above are gone, dynamic port mode also no longer makes sense and is removed)
- raw udp transport
- audio mixing
- RED handling
There are a couple known issues we’re currently working on but did not consider blockers:
- Bitrate rampup issues with 2 participants
—> there are some bugs we’re looking at here, but since 2 participant calls usually don’t even go through the bridge, we did not consider them blockers
- Endpoint ID limitation with Octo
—> When Octo is enabled, endpoint IDs must be 8 hexadecimal characters (without Octo, there is no limitation). This will be removed in the near future. More information here What is the reason to remove useNicks?
*Although this dependency is largely removed, it is not fully removed yet. The work to port the rest of the needed code (mainly just SRTP at this point) is underway.
Here’s a high level flow of packets that illustrates how they move through each of the components (ICE4J, JVB and jitsi-media-transform):
Here’s a more detailed look at the packet pipeline flow through the receiver pipelin in jitsi-media-transform, to the conference in the bridge where they get fanned out, and then through the sender pipeline in jitsi-media-transform