Need your help on ingesting RTMP/SRT stream (as a participant of Jitsi Meeting)

First of all, I want to give a shout out to Jitsi meet team for making such a great product, well-designed infrastructure.

As a newbie of either WebRTC or SRTP/RTMP streaming stuff, I recently encountered a requirement for supporting the ingest of RTMP/RTSP stream into a Jitsi conference. Instead of using common browser, some clients wish to join meetings with their OBS(open broadcaster system)". To be more clear, these moderators(host) will first start OBS studio, choose a meeting to join/create in Jitsi, then invites other people to be the co-hosts of webinars.

I hope to get some advice from Jitsi team/community on implementing such a feature. I have done research of existing resource from the community/discourse.

There are a few threads/discussion on this topic(I commented the first discussion one month ago as well):

  1. participant inputs rtmp stream from a source like obs
  2. Jitsi Meet with OBS (Open Broadcaster software)
  3. Using jitsi with OBS

Existing/Temporary Workarounds (Maybe name them as Solution A)

My research reveals a few existing workarounds(I can also verified the second solution on my Mac). The common idea is wrapping OBS stream (RTMP) as a virtual camera as the first step, then selecting such a camera (inside the browser) for Jitsi (WebRTC) meeting. In this way, typically the moderator could invites others to the webinars where he/she use the output of OBS (instead of physical cameras) as local video stream. Examples are:

Mac/Windows/Linux: NewTek’s “NDI Virtual Input”

Mac/Windows:

Linux
https://github.com/CatxFish/obs-v4l2sink97

P.S
On the bright side, they require minimum modification of Jitsi components. Nearly all the changes happen in OBS studio or OBS Plugins, these plugins mostly are written in C++/C.

The drawbacks are that they could break down randomly at some point, thus presenting technical barriers to non-developers in terms of upgrading or fixing issues from time to time. And it’s not so easy to streamline the whole process if there are any customized authentication or other constraints.

As a matter of fact, OBS Community has asked for some universal “Bounty” solution.

The more systematic approach that I found out:

:unicorn:Solution B:

It basically mimics the behaviour of Pjsua (part of Jibri component), but it has to listen for the inbound RTMP stream, and then get the media stream somehow into Browser’s WebRTC context.

Based on the suggestion in the forum (discussion between @Zharding and @damencho)

Based on my speculation in Lib-jitsi-meet code, I found that the video needs to made available through WebRTC API eventually, such as
navigator.mediadevices.enumeratedevices()

That’s why I have added the virtualdevice, so the application could write video/audio frame into such device(s), and the media track become available option in SDP.

However, because RTMP could mean around 4~5 seconds latency, It should worth trying replacing RTMP with SRT protocols.

:unicorn:Solution C:
(Is it possible??)

Inspired by Jitsi-Desktop (Electron App) or Chrome-Extension, it might be possible to use the output from local OBS studio (Provided that OBS studio also gets installed on the same workstation as Jitsi-Desktop.

Using plugins such as “OBS RSTP-Server”, it might be possible to pull data there from Application such as Jitsi-Desktop.

I don’t know how I could materialize a media stream, so that my ChromeApp or ElectronApp could make use of when participating in Jitsi Meeting.

I have read some public articles, get some vague ideas but still don’t know where to kick off WebRTC based using a dynamic live stream.

Please suggest some clues for me.

Thanks so much.

Tip: how to share any video on a Jitsi session

Thanks so much for sharing your solution @emrah . Sounds very interesting, and I believe it is workable. But the problem still lies for the end user, it is too complex for people who are not developer or unfamiliar with operating system hacking.