Skip to content

Black screen / mediaStatus stuck at NoMedia even with gstreamer backend and valid config #292

Description

@ACFHarbinger

Environment

  • Plugin version: 2.12.0
  • Plasma: 6.6.6
  • Qt: 6.10.2
  • OS: Ubuntu 26.04 LTS
  • QT_MEDIA_BACKEND: gstreamer (confirmed active in the running plasmashell process's environment)

Symptom
Video wallpaper shows a persistent black screen. Confirmed via the plugin's own DebugEnabled overlay that this is a genuine NoMedia state, not a decode/codec failure (InvalidMedia) or a still-loading state (LoadingMedia).

What I ruled out before filing

  1. isLoading race on plugin switch — known issue, already avoided in my repro by writing config well after the plugin was already active (not a fresh switch), and independently by fully restarting plasmashell and re-testing.
  2. Stale LastVideo vs VideoUrls mismatch — real, separate bug I found (when ResumeLastVideo is on and LastVideo doesn't match any entry in the current VideoUrls, main.currentSource resolves to Utils.createVideo(""), which FadePlayer.next()'s direct assignment (playerSource = root.currentSource) then captures into the active player). I fixed this on my own tool's side (kept LastVideo in sync with VideoUrls) and confirmed via the debug overlay that main.currentSource.filename correctly resolves to the intended video. next() demonstrably runs — the debug overlay's player: 1/2 value toggles between writes, confirming the primary/secondary player swap happens.
  3. Config validity — read back via readConfig after each write; VideoUrls is well-formed JSON, enabled: true, filename is a correctly percent-encoded file:// URI to an existing, valid, directly-playable file (confirmed the file plays fine both in an external player and via KDE's "Preview" button in this plugin's own settings dialog, which appears to use Haruna — same file plays correctly there).
  4. Stale/corrupted session state — did a full systemctl --user restart plasma-plasmashell.service, confirmed the new process has QT_MEDIA_BACKEND=gstreamer in its environment, and re-tested a single clean config write against the fresh process. Same result: playing: true (the outer main.qml computed property), but player1 playing: false, player2 playing: false, mediaStatus: 0 (NoMedia), nothing renders.

So even with a fresh process, the documented gstreamer backend fix already active, and a config that is provably correct and consistent (right filename, enabled: true, LastVideo in sync), the underlying VideoPlayer never actually receives a working media source. This looks like it's inside FadePlayer.qml's player/otherPlayer selection or the QML→QtMultimedia source handoff itself, rather than anything about how the config is written.

Happy to provide the exact qdbus scripting sequence used to reproduce this from a completely clean plasmashell restart, or test any suggested QML-side debugging (extra console.log in FadePlayer.qml, etc.), if that's useful.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions