Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[META] Rust Components: WebRTCSink, WHIP/WHEP integration #79

Open
tt2468 opened this issue Apr 4, 2023 · 12 comments
Open

[META] Rust Components: WebRTCSink, WHIP/WHEP integration #79

tt2468 opened this issue Apr 4, 2023 · 12 comments
Labels
enhancement New feature or request help wanted External contribution is required transport Underlying media or data transport protocols

Comments

@tt2468
Copy link

tt2468 commented Apr 4, 2023

When browsing this project as a potential option to replace apache guacamole in my setup, I noticed a lot of the set up and complexity comes from configuring the various WebRTC components to work effectively together. I've recently worked on some implementations of the WebRTC WHIP standard, and I think it could be an effective option to simplify things. There's options for paid hosted services, like Cloudflare Stream, and self-hosted server instances like Broadcast Box

WHIP standard: https://www.ietf.org/archive/id/draft-ietf-wish-whip-01.html
WHEP standard: https://www.ietf.org/archive/id/draft-murillo-whep-02.html

Gstreamer recently implemented WHIP support via their rust plugins, which may possibly be used to reduce implementation difficulty. Otherwise, the code from an OBS Studio PR I've worked on may be a useful reference: obsproject/obs-studio#7926

@ehfd
Copy link
Member

ehfd commented Apr 4, 2023

#7 (comment)

Relevant.
Would this replace the need for TURN servers?

@ehfd ehfd added enhancement New feature or request help wanted External contribution is required transport Underlying media or data transport protocols labels Apr 4, 2023
@ehfd
Copy link
Member

ehfd commented Apr 4, 2023

https://www.100ms.live/blog/webrtc-turn-server

Nope. Does not eliminate TURN.

@tt2468
Copy link
Author

tt2468 commented Apr 4, 2023

Does not eliminate TURN, but in most usage cases, WHIP is not used in a peer-to-peer style. For the example of Cloudflare Stream, it routes all traffic through their network before exiting as WHEP.

@ehfd ehfd mentioned this issue May 3, 2023
@ehfd
Copy link
Member

ehfd commented May 3, 2023

From @boxerab

Has anyone looked into using the Rust element webrtcsink ?

https://mathieuduponchelle.github.io/2021-12-14-webrtcsink.html

One nice feature is that is handles congestion control.

@ehfd ehfd changed the title WHIP/WHEP integration Rust Components: WebRTCSink, WHIP/WHEP integration May 3, 2023
@ehfd
Copy link
Member

ehfd commented Aug 17, 2023

To enable gstreamer-rs, rustc, cargo, cargo-c, tomli, and other packages are required. FYI when we actually use a Rust GStreamer element.

@ehfd
Copy link
Member

ehfd commented Aug 27, 2023

I almost included gstreamer-rs to the GStreamer build pipeline, but there was an upstream issue with meson preventing builds in Ubuntu 20.04.

Postponing until the next major release.

@ehfd
Copy link
Member

ehfd commented Sep 4, 2023

@ehfd ehfd changed the title Rust Components: WebRTCSink, WHIP/WHEP integration [META] Rust Components: WebRTCSink, WHIP/WHEP integration Oct 12, 2023
@ehfd
Copy link
Member

ehfd commented Mar 24, 2024

Integrated in build pipeline with GStreamer 1.24.0.

@tt2468
Copy link
Author

tt2468 commented Mar 25, 2024

I should probably point out that I think this should be possible without the Rust gstreamer system. WHIP is just signalling, and from a (admittedly rather quick) glance at the code, the signalling for the current webRTC system is done in python, with SDP's handed to/from GST.

@ehfd
Copy link
Member

ehfd commented Mar 25, 2024

m1k1o/neko#371

@tt2468 What do you think of this blueprint?

@ehfd
Copy link
Member

ehfd commented Apr 3, 2024

WebRTCSink is a wrapper for WebRTCBin, where settings are available in https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/blob/main/net/webrtc/src/webrtcsink/imp.rs

The issue of WHIP/WHEP is that there is no DataChannel for keys, cursors, and other information. Only read-only access would be possible without other transport protocols.

@ehfd
Copy link
Member

ehfd commented Apr 11, 2024

The immediate property should rather be a multi-user SFU server, based on GStreamer's own signalling server.

https://gstreamer.freedesktop.org/documentation/rswebrtc/index.html#usage

#39 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request help wanted External contribution is required transport Underlying media or data transport protocols
Projects
None yet
Development

No branches or pull requests

2 participants