Skip to content

Split vlc package

Description:

The VLC project consists of a media player with many plugins (currently we offer integration for 395 of them). While some plugins offer the needed codecs for specific file formats, others offer UI integration (e.g. ncurses, the Qt5 based GUI). The VLC project is fairly slow in development over the past years and they will rely on Qt5 for likely quite some time. Our current approach for the package is to add optional dependencies for the library requirements of many of the plugins, while some are somewhat implicitly considered the "default". This optional dependency setup leads to many "false-positive" warnings with namcap, it requires adding multiple entries for a single plugin and is generally not really that transparent to the packager or user (e.g. what if an optional dependency changes for a specific plugin?).

For environments like KDE, that are now Qt6, but rely on the library and/or plugins of the vlc project (see e.g. kaffeine or phonon-qt6-vlc) we do not want them to pull in Qt5 via the vlc "default" GUI, but we also want to be able to ensure their functionality beyond libvlc.so and libvlccore.so. AFAIK, the Deepin ecosystem has a similar issue and will likely also port to Qt6 (I guess?).

Moreover, going forward we want to make use of "autodeps". This concept allows automatic encoding of library dependencies based on sonames, instead of relying on the current manual method (adding libfoo.so), but would not be compatible with how we are currently packaging vlc (as all sonames needed for a package would be added automatically, leading to vlc pulling in all of its current optional dependencies by default).

By extension, we will want to shift the vlc package to a setup in which we have a) dedicated split packages for plugins, that rely on external libraries and that specifically encode their own requirements and b) meta-packages for overarching functionality (e.g. something like vlc-headless for fully headless use, vlc-gui for what we consider the "default" GUI use and vlc-full, providing all plugins).

In a first step the libvlc package has been split out from the vlc package. In a follow-up work block I have started to create dedicated packages for plugins, that rely on external libraries, which took quite long (as there are so many plugins, but by far not the majority relies on external libraries). This initial work is not yet done and will still require some more time, arriving at a sane baseline of dependencies (from which to split out plugins) and the integration of the specific meta packages.

Additional datapoints (also for testing):

  • the ffmpeg (in fact ffmpeg4.4) plugins pull in a lot of the optional dependencies, but the plugins are not necessarily the default for many of the use-cases
  • the video_output, vdpau and vaapi integration needs to be evaluated with regards to "default" behavior vs. "headless" functionality (currently some of the video_output plugins are not yet split out in the test branch).
  • VLC is able to provide useful error messages, if e.g. a file can not be played due to missing codec: screenshot-2024-10-09_12-35-00

Additional info:

Steps to reproduce:

  1. Install vlc
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information