GStreamer 1.20: Embedded and WebRTC lead the way
collabora.com
collabora.com
https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/t...
From the README:
> gst-plugins-bad: a set of plug-ins that aren't up to par compared to the rest. They might be close to being good quality, but they're missing something - be it a good code review, some documentation, a set of tests, a real live maintainer, or some actual wide use. If the blanks are filled in they might be upgraded to become part of either gst-plugins-good or gst-plugins-ugly, depending on the other factors.
This was a bit of a turn off when I was evaluating GStreamer for a WebRTC based product I'm working on.
https://gstreamer.freedesktop.org/documentation/frequently-a...
That said, webrtc is still in -bad: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/tree/ma...
https://www.reddit.com/r/golang/comments/kj1net/pion_webrtc_...
Thanks for the kind words. Hopefully you are happy with your choice! If you ever need any help or just a WebRTC sounding board I am always excited to chat.
EDIT: Didn't realize you were the author of Pion! We looked at Pion and Janus when we were evaluating, but ended up using GStreamer ultimately because we had other GStreamer components within our pipeline.
If you saw anything when evaluating Pion that could have made it better I would love to hear. Always trying to improve. These threads are super exciting since I get a general guidance.
Existing Pion users are biased/accepting of its flaws ;)
> What is GStreamer?
> GStreamer is a library for constructing graphs of media-handling components. The applications it supports range from simple Ogg/Vorbis playback, audio/video streaming to complex audio (mixing) and video (non-linear editing) processing.
> Applications can take advantage of advances in codec and filter technology transparently. Developers can add new codecs and filters by writing a simple plugin with a clean, generic interface. Read more ...
> GStreamer is released under the LGPL. The 1.x series is API and ABI stable and supersedes the previous stable 0.10 series. Both can be installed in parallel.
That should be at the top of the page.
But they should provide some links to applications built with it.
The next big challenge in the space seems to be getting widely available congestion control. The hard part is making sure it is understandable and customizable for everyones use cases.
If you use the ffmpeg library, I will just say it's extremely unwieldy and difficult to use, and has barely any official documentation or examples. GStreamer is the opposite IME.
In any case, they generally fill different niches. FFmpeg is, generally, a library containing set of A/V codecs and (de)muxers. (There are some more obscure parts, too, plus a command line tool ffmpeg(1) that gives access to most aspects of that library.) GStreamer is, generally, an A/V graph framework originally modelled after Microsoft DirectShow.
If you find FFmpeg too difficult to use, most likely what you want isn't a codec library in the first place, but some higher-level abstraction (e.g. if you just want a video on screen, most likely you don't want to muck around with low-level demuxing, but you'd rather want something that deals with clocks and sync and stuff, and FFmpeg just doesn't do that—it's not a video player). It has a lot of weaknesses, but the API is fairly straightforward for what it does.
gstreamer and ffmpeg can both fill the same niche, but not completely. gstreamer is plugin based while ffmpeg is monolithic. gstreamer has a plugin for ffmpeg, while the reverse is (or wasn't last i checked) isn't true.
You need pipewire, pulse, or plain alsa to actually play the audio streams. Not a lot of overlap most of the time with gstreamer or ffmpeg unless you're dealing with raw streams.
There’s also a Plug-in Development Guide. Both of these are good resources. PDFs of the same should be available online.
I'll have to run some tests though.