Open-source project
zaps166/QMPlay2 avatar
zaps166/QMPlay2

QMPlay2: a Qt media player built on FFmpeg and Vulkan

QMPlay2 is a video and audio player which can play most formats and codecs.

1,199 stars200 forksC++LGPL-3.0

At a glance

What is it?
QMPlay2 is a C++ and Qt video and audio player that plays everything FFmpeg supports, adds a YouTube browser, spherical video, Streamlink integration and hardware decoding across six backends, and documents the caveats of each one in detail.
Who is it for?
QMPlay2 fits a Linux or Windows user who wants one player for local files, streams and YouTube, and who wants hardware decoding with a written description of what each backend breaks. It does not fit a user who wants a minimal, scriptable player.
Can I use it commercially?
Yes, with conditions. LGPL-3.0 is a weak copyleft licence: you can use it inside commercial and closed-source software, but if you distribute changes to its own files, you must publish those changes under the same licence.
Is it still maintained?
Yes. The repository last received commits 15 days ago.
What is it written in?
Mainly C++, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What QMPlay2 plays and how it is built

QMPlay2 is a video and audio player written in C++ with Qt. The README describes it as a player that can play all formats supported by FFmpeg, and adds Audio CD, raw files and chiptunes to that list, along with a built-in YouTube browser.

Everything about the format handling follows from the FFmpeg dependency. The player does not carry its own decoders, so the set of playable files is the set FFmpeg can decode, and the quality of the playback depends on the FFmpeg build the distribution provides. That is a deliberate division of labour, and it is also the main thing to check before installing: a distribution with an old or minimal FFmpeg will not play what a current one will.

The project is LGPL-3.0 licensed, and the tree shows a conventional Qt and CMake layout with a src/ directory, lang/ for translations, a version file, a ChangeLog and an AUTHORS file, plus a flatpak manifest, io.github.zaps166.QMPlay2.Devel.json, and a .gitmodules file for the bundled dependencies. Releases are dated with a year.month.day scheme: 26.08.02 on 2026-08-02, 26.06.27 on 2026-06-27 and 25.09.11 on 2025-09-11. The last push to the repository was on 2026-10-08.

The topic list of the repository names Vulkan, hardware acceleration, video filtering, multimedia keys and cmake, which is a fair summary of where the development attention goes.

Installing QMPlay2 on each distribution

The README covers Windows and five Linux distributions, and the differences between them are instructive.

On Windows the answer is to download the installer from the releases page. On Arch Linux the package is in the AUR, and the README names the AUR client to use:

bash
yay -S qmplay2-git

On Gentoo and Slackware the package names are the whole instruction:

bash
emerge --ask media-video/qmplay2
bash
slpkg install QMPlay2

openSUSE needs the Packman repository added and the distribution switched to it, which is the first place the README issues a warning, and it is worth heeding:

sh
sudo zypper ar https://ftp.gwdg.de/pub/linux/misc/packman/suse/openSUSE_Tumbleweed Packman
sudo zypper dup --allow-vendor-change --from "Packman"
sudo zypper in QMPlay2

Fedora needs RPM Fusion enabled and the multimedia group installed, with a PackageKit gstreamer plugin excluded so that two multimedia stacks do not compete:

sh
sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
sudo dnf groupupdate core
sudo dnf update
sudo dnf groupupdate multimedia --setop="install_weak_deps=False" --exclude=PackageKit-gstreamer-plugin
sudo dnf groupupdate sound-and-video
sudo dnf install qmplay2

The openSUSE warning about not mixing FFmpeg from different repositories applies more widely than it looks, because every other dependency of the player follows the same rule.

The YouTube browser and its yt-dlp dependency

QMPlay2 has a browser for YouTube content built into it, and the quality selection is configurable. The settings icon next to the search bar opens a panel where the order of audio and video quality priorities can be changed, and if the chosen quality is not available for a particular video, the player falls through to the next entry in the list.

The mechanism underneath is yt-dlp. The README is direct that YouTube videos do not work without external yt-dlp software, and that QMPlay2 downloads it automatically. The downloaded copy can be removed through the settings, which is the hook for anyone who prefers to manage the tool themselves or has a policy about binaries appearing on disk.

Two Windows notes follow from the same design. The antivirus or firewall must not block yt-dlp and must not block the execution of external applications, which is a common cause of a silent failure on Windows. And the README mentions that Vulkan might not switch to full screen exclusive on some configurations or with obsolete drivers, which is a rendering note rather than a YouTube one, but it appears in the same section because that is where Windows users hit it.

The result is that QMPlay2 is a player for YouTube as much as it is a local file player, and the price is a dependency on an external tool that has to be present and unblocked.

Hardware decoding and what each backend breaks

QMPlay2 supports hardware video decoding through six backends: Vulkan Video, CUVID on NVIDIA, DXVA2 on Windows, D3D11VA on Windows with Vulkan, VA-API on Linux and BSD, and VideoToolBox on macOS. Acceleration is off by default, and enabling it means moving the hardware accelerated decoder to the top of the decoder list in the playback settings and applying.

The README then documents the constraints, and this is the most useful part of the file for anyone enabling acceleration. CUVID, DXVA2 and VA-API use the OpenGL video output, so OpenGL features are available but CPU filters do not work. VkVideo, CUVID, D3D11VA and VA-API use the Vulkan output, so Vulkan features are available but CPU filters do not work. DXVA2 requires the WGL_NV_DX_interop extension and does not work with Vulkan at all. VA-API on Vulkan uses its own deinterlacing filter, and only on Intel drivers. H.264 lossless movies, encoded at CRF 0 or QP 0, might not decode properly through VA-API. VideoToolBox does not support deinterlacing.

The CPU filter limitation is the one that bites in practice. A user with a video filter pipeline and a hardware decoder has to choose between the two, and the README says so rather than hiding it.

There is also a Linux specific set of notes. VA-API with OpenGL uses EGL for context creation, and on X11 the automatic detection can fail, in which case the manual route is to export QT_XCB_GL_INTEGRATION=xcb_glx and start the player from a terminal. On a machine with several GPUs, the same device has to serve both VA-API and OpenGL, and if detection fails the card can be named directly with QMPLAY2_EGL_CARD_FILE_PATH=/dev/dri/card1. Both are exported from the command line, and the README suggests exporting them globally once they work.

Deinterlacing, spherical video and the ALSA note

Interlacing is detected automatically, and the deinterlacing options live under the video filters in the settings. The README recommends the Yadif 2x filter for better quality when the CPU is fast or the resolution is low.

Two warnings come with it. The filter can be enabled on non-interlaced video when necessary, for example when a file carries no interlacing data, and the setting has to be reverted for other files because quality and performance both get worse. And hardware accelerated decoding uses its own filtering, so a CPU deinterlacing method such as Yadif 2x does nothing while acceleration is active, which is the same CPU filter limitation that appears in the acceleration section.

The Vulkan renderer has its own Yadif filter, used by default for CPU decoded video, and that behaviour can be changed in the Vulkan renderer settings, where the same filter is also used for hardware decoded video. There is a further edge case: the chroma plane may not be properly deinterlaced when the pixel format is not YUV420 and XVideo is the video output.

Spherical video is supported on both the OpenGL and Vulkan outputs, with the Ctrl+3 shortcut, and the same view is available from the menu under Playback, Video filters, Spherical view.

For ALSA, the README has a configuration note: a user with a custom asound.conf or .asoundrc should append defaults.namehint.!showall on, otherwise devices that have been added may not be visible at all.

Streamlink, hidden features and where QMPlay2 is the wrong tool

QMPlay2 can act as the player behind Streamlink, which is how a live stream ends up in this player rather than in a browser:

bash
streamlink -p QMPlay2 --player-http "URL" best
bash
streamlink -p QMPlay2 -a /dev/stdin "URL" best

The second form plays from standard input, which is the pattern for piping a stream into the player.

The README has a hidden features section, and these are the ones worth knowing. Right clicking the volume slider and choosing Split channels gives per-channel balance. Last.fm scrobbling is configured under the modules settings, in the extensions list, by entering a login and password. Two empty files in the share directory change startup behaviour: portable makes the player store its settings in the application directory, and noautoupdates disables the automatic update check at first run. Still images can be displayed by enabling the read and display still images option. And a CustomUserAgent can be set in the QMPlay2.ini file.

Where QMPlay2 is the wrong tool is mostly about the alternative. QMPlay2's distinct advantages are the FFmpeg-everything breadth combined with a small, focused interface, the spherical video support, the YouTube browser with quality priorities, and the unusually honest documentation of what each hardware decoding path breaks.

The cost of that FFmpeg-everything approach is real: the player is only as good as the FFmpeg build on the machine, and the openSUSE instruction not to mix FFmpeg from different repositories is the failure mode to avoid.

Editorial conclusion

QMPlay2 fits a Linux or Windows user who wants one player for local files, streams and YouTube, and who wants hardware decoding with a written description of what each backend breaks. It does not fit a user who wants a minimal, scriptable player. Check first whether your distribution packages a recent FFmpeg, since the openSUSE instructions warn against mixing FFmpeg builds from different repositories.

Frequently asked questions

How do I install QMPlay2 on Linux?

On Arch Linux use the AUR with yay -S qmplay2-git, on Gentoo emerge --ask media-video/qmplay2, and on Slackware slpkg install QMPlay2. openSUSE and Fedora need their extra repositories and multimedia groups enabled first, as the README shows.

Does QMPlay2 need yt-dlp to play YouTube videos?

Yes. The README states that YouTube videos do not work without external yt-dlp software, and QMPlay2 downloads it automatically. The downloaded copy can be removed through the settings, and on Windows the antivirus or firewall must not block it.

Which hardware video decoders does QMPlay2 support?

Vulkan Video, CUVID on NVIDIA, DXVA2 on Windows, D3D11VA on Windows with Vulkan, VA-API on Linux and BSD, and VideoToolBox on macOS. Acceleration is disabled by default and is enabled by moving the hardware decoder to the top of the decoder list in the playback settings.

What is the ALSA configuration note in the QMPlay2 README?

If you use your own asound.conf or .asoundrc, the README asks you to append defaults.namehint.!showall on to the configuration file. Without it, devices that have been added may not be visible to the player.

Official sources

  1. Issues
  2. License: LGPL-3.0
  3. README
  4. Releases
  5. zaps166/QMPlay2 on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/zaps166-qmplay2.svg)](https://hysenlabs.com/projects/zaps166-qmplay2)

Was this useful?