Gst-plugins-rs webrtc-precise-sync-recv example producing artifacting

I’ve been facing lot of issues with webrtcbin with regards to artifcating (packet-loss) as I’ve posted on a previous thread and have created an issue. I assumed it was something I was doing wrong and decided to switch the webrtcsrc from gst-plugins-rs.
I realized it’s better to run the webrtc-precise-sync-recv example before fully committing to the rewrite.

I modified the source code of gstwebrtc-api to use getDisplayMedia instead of getUserMedia.
I opened 3 tabs on my terminal. I ran the following in each tab from the root of the repository

  1. cargo r --example webrtc-precise-sync-recv --no-default-features
  2. cargo run --bin gst-webrtc-signalling-server --no-default-features
  3. Navigated to gstwebrtc-api. pnpm i && pnpm start

I’m seeing lot of artifacting immediately. Is there something I’m missing?

OS: Fedora Linux 41 (Workstation Edition)
Output of gst-launch-1.0 --version

gst-launch-1.0 version 1.24.10
GStreamer 1.24.10
http://download.fedoraproject.org

The webrtc-precise-sync recv / send examples handle configurations suitable for use cases where the producer & consumer honor specific synchronisation properties.

When you use the gstwebrtc-api example as a producer, you should use the default configuration you get from webrtcsrc. ex.:

gst-launch-1.0 webrtcsrc signaller::producer-peer-id=45880b96-0f6b-48c9-9453-bb49bab404a8 ! queue ! autovideosink

where 45880b96-0f6b-48c9-9453-bb49bab404a8 is the Client-ID advertised by the web interface.

Using the main branch of the mono repo, you could simplify the invocation as:

gst-launch-1.0 webrtcsrc connect-to-first-producer=true ! queue ! autovideosink
1 Like

Ah got it! Thanks! It seems to work better…
But I’m still seeing artifacts after a while




It seems like you experience connectivity issues: for each screenshot, local time and sent packets increase while remote time and received packets remain the same.

Yup you’re right. But I don’t think it’s a network issue as I’m not facing this issue when the receiver is my browser.

To provide more details and a proper comparison, I took screenshots of GStreamer as receiver and browser as receiver (If you need any more details let me know)

GStreamer






Browser