Pyrite – open-source video conferencing

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

InfluxDB - Power Real-Time Data Analytics at Scale
Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
www.influxdata.com
featured
SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives
www.saashub.com
featured
  • galene

    The Galène videoconference server

  • Yes, you are right that there is also a simple loss-based congestion control mechanism (https://github.com/jech/galene/blob/e8fbfcb9ba532f733405b1c5...) and a min() between it and the REMB. I missed that part. However, that appears to still be immature, only in a different way than I thought.

    If I'm right that only one server->client video stream (called "down track" in the Galene code) is receiving the REMB message, then only one will use the REMB value and the rest will fallback to loss-based congestion control. If I'm wrong and all the server->client video streams are receiving the REMB message, then all of them will use that same value which will be higher than a calculated by the loss-based congestion control for each stream independently, so in effect they will all be falling back to loss-based congestion control (when there is more than 1 video stream; for 1 video stream it probably works fine).

    Either way, it appears that each server->client video stream is independently running a loss-based congestion controller, all of which will be battling each other (like N TCP streams do). That can work, I guess, but it's better to run one congestion controller and then divide that bitrate among the various video streams, which is what I meant by "bitrate allocation".

    In other words, selecting video layers to send is exactly what I mean by bitrate allocation. Sorry for being unclear about that. The code you linked to is estimating the client->server bitrate for a given video stream. What I was looking for is code that will take a bitrate (from one congestion control mechanism, whatever it may be) and then divides that between the various video streams that flow server->client by selecting which layers to forward. I couldn't find that, and now I see why: because each video stream has its own congestion controller, and they apparently compete with each other where they are likely all loss-based in practice.

    Loss-based congestion control for video conferencing isn't as good as latency-based congestion control because it will cause more latency.

    Thanks for pointing out what I was missing. Now that I understand it better, I can see that it would work fine for 1 video stream (when there are only 2 clients in the call), but then likely falls back to loss-based congestion control for more than 2 clients, which will work, but not as well.

    If this is accurate, then I'd make a few suggestions for Galene:

  • pyright

    Static Type Checker for Python

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

    InfluxDB logo
  • azure-ubuntu-jitsi

    A private Jitsi videoconferencing set up on Azure

  • The most interesting thing for me is actually the galene server, but playing around with the demo server and looking at the documentation it seems to be a fair bit behind Jitsi in ease of use and deployment.

    (I built a one-shot template to deploy and run Jitsi on Azure - https://github.com/rcarmo/azure-ubuntu-jitsi - and it's been trivial to maintain over the past two years, for a small group of friends and monthly "open sessions")

    I'm not enamored of the Pyrite UI (again, Jitsi seems simpler), but I'll keep an eye on both.

  • pyrite

    Discontinued Pyrite is a web(RTC) client & management interface for Galène SFU

  • It would really help if the author had a list of "features" on the github project. It is a bit difficult to figure out what exact functionality the project supports.

    * https://github.com/garage44/pyrite/

  • Signal-Calling-Service

    Forwards media from 1 group call device to N group call devices.

  • I was curious and looked through the code of Galene briefly and found the following, which may answer your question. For context, I am familiar with the Jitsi code and have written my own calling server (and written about it: https://signal.org/blog/how-to-build-encrypted-group-calls/).

    Galene appears to be less mature than Jitsi. For example, it uses REMB feedback messages from the client to calculate allowable bitrates rather than calculating the bitrates itself (as Jitsi and Signal's SFU do). Worse, it appears that what it does with that information is erroneous. I could be wrong, but it looks like the bitrate allocation code (see https://github.com/jech/galene/blob/e8fbfcb9ba532f733405b1c5...) only allocates the bitrate for one of the video streams, not all of them. Perhaps the author did not realize that there is one REMB sent back for all the video streams by WebRTC rather than one per stream (see, for example, here: https://source.chromium.org/chromium/chromium/src/+/main:thi...). Further, I find the spatial layer switching code to be strange. For examples, it doesn't go down a layer unless it's 150% over the estimated allowable bitrate, which gives a lot of opportunity for inducing latency.

    In short, I think Galene has a ways to go before it works as well as Jitsi (Videobridge), and thus Pyrite group calls are unlikely to work as well as Jitsi group calls (for 1:1 calls, I don't know; I didn't look into that).

    Oh, and just a reminder, the SFU we use for Signal group calls is also open source: https://github.com/signalapp/Signal-Calling-Service.

  • SaaSHub

    SaaSHub - Software Alternatives and Reviews. SaaSHub helps you find the best software and product alternatives

    SaaSHub logo
NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts

  • Ask HN: Is it ok to reject a job because I don’t like their software?

    2 projects | news.ycombinator.com | 9 Feb 2022
  • Best WebRTC Alternative to Zoom?

    1 project | news.ycombinator.com | 24 Jan 2024
  • Show HN: Best of WebRTC – Zoom Alternative?

    1 project | news.ycombinator.com | 23 Jan 2024
  • Voice/Video call for Iranians

    1 project | /r/selfhosted | 24 Nov 2022
  • Scaling WebRTC with Go: how we built a distributed mesh network for 100k-person events

    2 projects | /r/golang | 27 Oct 2022