Skip to content

Wayland (niri) screencast fails with PipeWire “no more input formats” / GStreamer “not-negotiated” #392

@abcfy2

Description

@abcfy2

Bug report checklist

  • Always send the vokoscreenNG log, after a "Start" and "Stop" (I will attach it below)
  • Have you searched the existing issues to see if this report is a duplicate?
  • Are you using the latest version of vokoscreenNG?
  • Are you familiar with https://www.mediawiki.org/wiki/How_to_report_a_bug ?

Describe the bug

On Wayland under niri, starting a portal-based screencast fails immediately.
vokoscreenNG cannot set the GStreamer pipeline to PLAYING and reports GST_STATE_CHANGE_FAILURE.
PipeWire / GStreamer logs show negotiation failing with:

  • pipewiresrc ... stream error: no more input formats
  • streaming stopped, reason not-negotiated (-4)
  • PipeWire link negotiation: negotiating -> error (no more input formats)

On X11 with the same audio-track selection, recording works as expected.


Environment

From vokoscreenNG log header:

  • vokoscreenNG: 4.7.4
  • Desktop: niri (Wayland session)
  • OS: EndeavourOS (Arch-based), x86_64, CPU threads: 16
  • Qt: 6.10.1
  • GStreamer: 1.26.10
  • PulseAudio library: 17.0.0 (pipewire-pulse)
  • PipeWire: 1.4.9

Portal packages:

pacman -Qs xdg-desktop-portal
local/xdg-desktop-portal 1.20.3-2
local/xdg-desktop-portal-gnome 49.0-1 (gnome)
local/xdg-desktop-portal-gtk 1.15.3-1

Portal services (confirm no wlr backend is active):

systemctl --user status xdg-desktop-portal xdg-desktop-portal-gnome xdg-desktop-portal-wlr --no-pager
# xdg-desktop-portal: active (running)
# xdg-desktop-portal-gnome: active (running)
# Unit xdg-desktop-portal-wlr.service could not be found.

Log messages

1) vokoscreenNG log

22:40:53 [vokoscreenNG] Desktop session is a Wayland session
22:40:53 [vokoscreenNG] Version: 4.7.4
22:40:53 [vokoscreenNG] Locale: zh_CN
22:40:53 [vokoscreenNG] Log from: 2025-12-29 22:40:53
22:40:53 [vokoscreenNG] Country: China
22:40:53 [vokoscreenNG] Qt: 6.10.1
22:40:53 [vokoscreenNG] GStreamer 1.26.10
22:40:53 [vokoscreenNG] PulseAudio library version: 17.0.0
22:40:53 [vokoscreenNG] Pipewire version: 1.4.9
22:40:53 [vokoscreenNG] Operating system: EndeavourOS
22:40:53 [vokoscreenNG] CPU Architecture: x86_64
22:40:53 [vokoscreenNG] Count CPU: 16
22:40:53 [vokoscreenNG] vokoscreenNG running as: wayland client
22:40:53 [vokoscreenNG] vokoscreenNG running on: wayland
22:40:53 [vokoscreenNG] Desktop: niri
22:40:53 [vokoscreenNG] Systray: Supported
22:40:53 [vokoscreenNG] Icon-Theme: Qogir-Dark
22:40:53 [vokoscreenNG] Styles: QList(kvantum-dark, kvantum, qt5ct-style, qt6ct-style, Windows, Fusion)
22:40:53 [vokoscreenNG] Qt-PluginsPath:      /usr/lib/qt6/plugins
22:40:53 [vokoscreenNG] Qt-TranslationsPath: /usr/share/qt6/translations
22:40:53 [vokoscreenNG] Qt-LibraryPath:      /usr/lib
22:40:53 [vokoscreenNG] SettingsPath: /home/fengyu/.config/vokoscreenNG/vokoscreenNG.ini
22:40:53 [vokoscreenNG] LogPath: /home/fengyu/.config/vokoscreenNG/log/2025-12-29_22-40-51.log
22:40:53 [vokoscreenNG] Default Videopath: /home/fengyu/视频

22:40:53 [vokoscreenNG] --- Screencast: GStreamer elements ---
22:40:53 [vokoscreenNG] + pipewiresrc
22:40:53 [vokoscreenNG] + videoconvert
22:40:53 [vokoscreenNG] + videorate
22:40:53 [vokoscreenNG] + queue
22:40:53 [vokoscreenNG] + h264parse
22:40:53 [vokoscreenNG] + pulsesrc
22:40:53 [vokoscreenNG] + audioconvert
22:40:53 [vokoscreenNG] + audiorate
22:40:53 [vokoscreenNG] + audioresample
22:40:53 [vokoscreenNG] + audiomixer
22:40:53 [vokoscreenNG] + filesink
22:40:53 [vokoscreenNG] + videocrop

22:40:53 [vokoscreenNG] --- Convert to GIF: GStreamer elements ---
22:40:53 [vokoscreenNG] + filesrc
22:40:53 [vokoscreenNG] + matroskademux
22:40:53 [vokoscreenNG] + h264parse
22:40:53 [vokoscreenNG] + openh264dec
22:40:53 [vokoscreenNG] + queue
22:40:53 [vokoscreenNG] + videoconvert
22:40:53 [vokoscreenNG] - gifenc
22:40:53 [vokoscreenNG] + filesink

22:40:53 [vokoscreenNG] --- Convert to MP4: GStreamer elements ---
22:40:53 [vokoscreenNG] + filesrc
22:40:53 [vokoscreenNG] + matroskademux
22:40:53 [vokoscreenNG] + h264parse
22:40:53 [vokoscreenNG] + queue
22:40:53 [vokoscreenNG] + mp4mux
22:40:53 [vokoscreenNG] + filesink
22:40:53 [vokoscreenNG] + mpegaudioparse
22:40:53 [vokoscreenNG] + opusparse

22:40:53 [vokoscreenNG] --- Convert to WEBM: GStreamer elements ---
22:40:53 [vokoscreenNG] + filesrc
22:40:53 [vokoscreenNG] + matroskademux
22:40:53 [vokoscreenNG] + h264parse
22:40:53 [vokoscreenNG] + openh264dec
22:40:53 [vokoscreenNG] + queue
22:40:53 [vokoscreenNG] + videoconvert
22:40:53 [vokoscreenNG] + vp8enc
22:40:53 [vokoscreenNG] + webmmux
22:40:53 [vokoscreenNG] + filesink
22:40:53 [vokoscreenNG] + uridecodebin
22:40:53 [vokoscreenNG] + audioconvert
22:40:53 [vokoscreenNG] + audiorate
22:40:53 [vokoscreenNG] + vorbisenc

22:40:53 [vokoscreenNG] Formats, video- and audio codec are only for record, not for the player
22:40:53 [vokoscreenNG] Video formats:
22:40:53 [vokoscreenNG] + matroskamux (mkv)

22:40:53 [vokoscreenNG] Video encoder:
22:40:53 [vokoscreenNG] + openh264enc

22:40:53 [vokoscreenNG] Audio encoder:
22:40:53 [vokoscreenNG] + opusenc
22:40:53 [vokoscreenNG] + lamemp3enc

22:40:53 [vokoscreenNG] [Audio] Found: Noise Canceling source Device: rnnoise_source
22:40:53 [vokoscreenNG] [Audio] Found: Monitor of Ellesmere HDMI Audio [Radeon RX 470/480 / 570/580/590] Digital Stereo (HDMI 6) Device: alsa_output.pci-0000_08_00.1.hdmi-stereo-extra5.monitor
22:40:53 [vokoscreenNG] [Audio] Found: Monitor of Starship/Matisse HD Audio Controller 模拟立体声 Device: alsa_output.pci-0000_0a_00.4.analog-stereo.monitor
22:40:53 [vokoscreenNG] [Audio] Found: Starship/Matisse HD Audio Controller 模拟立体声 Device: alsa_input.pci-0000_0a_00.4.analog-stereo

22:40:53 [vokoscreenNG] This screen is the primary screen:  HDMI-A-1
22:40:53 [vokoscreenNG] DevicePixelRatio: 1.25  (Normal displays is 1, Retina display is 2)
22:40:53 [vokoscreenNG] myDevicePixelRatio: 1.25
22:40:53 [vokoscreenNG] Screen Resolution width : 2048
22:40:53 [vokoscreenNG] Screen Resolution height : 1152
22:40:53 [vokoscreenNG] Vertical refresh rate of the screen in Hz: 74.968
22:40:53 [vokoscreenNG] Screen orientation QFlags<Qt::ScreenOrientation>(LandscapeOrientation)
22:40:53 [vokoscreenNG] Color depth of the screen:  32
22:40:53 [vokoscreenNG] Model from screen:  PHL 245E1
22:40:53 [vokoscreenNG] Manufactur from screen:  Philips Consumer Electronics Company
22:40:53 [vokoscreenNG] SerialNumber from screen:

22:41:10 [vokoscreenNG] Start portal fullscreen
22:41:10 [vokoscreenNG] Mouse cursor is recording
22:41:10 [vokoscreenNG] request path /org/freedesktop/portal/desktop/request/1_337/
22:41:10 [vokoscreenNG] [QvkMainWindow_wl] slot_pre_portal_start()
22:42:58 [vokoscreenNG] SecondWaitBeforeRecording: 1

22:42:58 [vokoscreenNG] Free disk space at the beginning of the recording: 319269 MB

22:42:58 [vokoscreenNG] Separated audio tracks: false

22:42:58 [vokoscreenNG] Start record with: pipewiresrc fd=58 path=122 do-timestamp=true ! videoconvert ! videorate ! queue max-size-bytes=1073741824 max-size-time=10000000000 max-size-buffers=1000 ! video/x-raw, framerate=25/1 ! openh264enc qp-min=23 qp-max=23 usage-type=camera complexity=low multi-thread=0 slice-mode=auto ! h264parse ! matroskamux name=mux writing-app=vokoscreenNG_4.7.4 ! filesink location="/home/fengyu/视频/vokoscreenNG-2025-12-29_22-42-58.mkv"

22:42:58 gst-launch-1.0 -e \
    pipewiresrc fd=58 path=122 do-timestamp=true \
        ! videoconvert \
        ! videorate \
        ! queue max-size-bytes=1073741824 max-size-time=10000000000 max-size-buffers=1000 \
        ! video/x-raw, framerate=25/1 \
        ! openh264enc qp-min=23 qp-max=23 usage-type=camera complexity=low multi-thread=0 slice-mode=auto \
        ! h264parse \
        ! matroskamux name=mux writing-app=vokoscreenNG_4.7.4 \
        ! filesink location="/home/fengyu/视频/vokoscreenNG-2025-12-29_22-42-58.mkv"

22:42:58 [vokoscreenNG] Start was clicked GST_STATE_CHANGE_FAILURE Returncode = 0
22:42:58 [vokoscreenNG] Unable to set the pipeline to the playing state.
22:51:21 [vokoscreenNG] Stop record
22:51:21 [vokoscreenNG] Free disk space at the end of the recording: 319332 MB

2) Additional logs (GStreamer / PipeWire) — for diagnosis

These are extra diagnostic logs that show the failure mode.

GStreamer log (filtered):

WARN pipewiresrc ... error: stream error: no more input formats
WARN basesrc ... error: Internal data stream error.
WARN basesrc ... error: streaming stopped, reason not-negotiated (-4)

PipeWire / portal related journal (trimmed):

pw.context: params Spa:Enum:ParamId:EnumFormat: 1:0 invalid param (output format (no more input formats))
pw.link: (SOURCE -> SINK) negotiating -> error (no more input formats) (configure-configure)
pw.core: ... error -32 ...: no more input formats
mod.client-node: ... error seq:... -32 (no more input formats)

To Reproduce

  1. Login to a Wayland session with niri.
  2. Start vokoscreenNG.
  3. Choose portal/fullscreen (screen sharing portal dialog appears).
  4. Click Start.
  5. In the portal dialog, select a monitor/window and click Share.
  6. Recording fails immediately; pipeline cannot enter PLAYING.

Expected behavior

Recording should start successfully and write a valid video file (with or without audio tracks).

Actual behavior

Recording fails right after granting portal capture permission:

  • vokoscreenNG reports it cannot set the pipeline to PLAYING (GST_STATE_CHANGE_FAILURE)
  • GStreamer: not-negotiated
  • PipeWire: no more input formats

Additional context (PipeWire nodes / format negotiation)

Right after clicking Share, two PipeWire nodes appear:

  • Source: niri (video output stream)
  • Sink: vokoscreenNG (video input stream)

Example IDs from one run (IDs change per run):

SOURCE node (Stream/Output/Video): id 122  node.name="niri"
SINK   node (Stream/Input/Video):  id 94   node.name="vokoscreenNG"

Enumerating formats on the niri source node:

pw-cli enum-params 122 3

shows (trimmed):

Video:format ... BGRx
Video:size ... 2560x1440
Video:maxFramerate ... 74968/1000

During a failing run, PipeWire repeatedly enumerates many formats (e.g. I420/NV12/Y444_10BE etc.) and ends with:

... output format (no more input formats)
pw.link: (122 -> 94) negotiating -> error (no more input formats)

This looks like no common format can be negotiated between source and sink, resulting in no more input formats.

If you want, I can provide full output of:

  • pw-cli info <SOURCE_ID> and pw-cli info <SINK_ID>
  • pw-cli enum-params <SOURCE_ID> 3 and <SINK_ID> 3
  • pw-dump (full graph)

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions