Choosing between libav and gstreamer for my multimedia project
This was the very first time I decided to make a multimedia project. Earlier I had no clue what transcoding even is (let alone know how complicated it is to get it working your way). From the very start I was (and still am) only aware of two multimedia libraries
libav and gstreamer. But both have their pros and cons and today I will list them all over here.
ffmpeg - libav
- Love the extra tools provided. ffmpeg is quite easy to get a hang of, and ffprobe was very useful in building a better understanding of what a video file actually is. ffplay should possible get some improvements and hate that
-hide_banner
setting is not on by default - hate the development cycle. The libav libraries have many.... just too many deprecated functions
- Since it is very fast changing code base, the documentation is quite sparse and hard to find for the newer library functions
- The team is still only using mailing lists, which I personally find hard to navigate and participate in.
- Searching for help online, mostly leads to discussions around ffmpeg cli and less around the usage of libav libraries, which is quite discouraging as a beginner
- The highly changing code base makes it really hard to dynamically bundle libraries
- Harder to find good bindings with languages other than c/c++. I mainly wanted to use rust but that was not possible with libav. The golang bindings were also limited to just
avformat
,avcodec
,avutil
(Check)
Gstreamer -- I might be biased now
- I know it provides many extra tools but I have only used gst-launch so far, which I guess trys to do what the ffmpeg cli does, but this feels more like a developer centric tool helping to build and prototype multimedia apps; compared to ffmpeg which is a full fledged utility tool. So, to be clear, gstreamer wins this usecase for a developer
- The plugin architecture is great. I haven't understood it completely, yet, but just knowing that I can apply custom code to an existing multimedia framework is quite assuring
- The plugin library is great. Yet to find a usecase that isn't full filled
- Since it is a data pipelining framework and not specifically a multimedia framework, it is hard to do multimedia specific things sometimes. The main reason I shifted to using ffmpeg/libav in the first place was because I got frustrated with some sort of syncronisation error while trying to record both audio and video. Was working well with just video. But ironically, faced even more difficulty just getting video recording to work with libav (got some stride error. Many similar questions on the internet with no useful answer)