Mpv can't play videos at all, vlc can play videos but drops frames

Expected behaviour: Video plays without errors on vlc and mpv

Actual behavior: Videos don’t start at all on mpv. Videos play but have intermittent black frames every 4-7 seconds on vlc.

Steps to reproduce [mpv]:

  1. Use terminal (or any other method) to try to play a video with mpv
  2. Fail with error code mpv: symbol lookup error: /usr/lib64/pipewire-0.3/jack/libjack.so.0: undefined symbol: pw_context_conf_section_match_rules

steps to reproduce [vlc]:

  1. start playing any video using vlc
  2. video starts, but doesn’t play flawlessly.
Terminal output of vlc when playing a video

VLC media player 3.0.16 Vetinari (revision 3.0.13-8-g41878ff4f2)
[000055afa7c5eb70] main libvlc: Kjører VLC med standardbrukerflaten. Bruk «cvlc» for å kjøre VLC uten en brukerflate.
[000055afa7d41720] main audio output error: too low audio sample frequency (0)
[00007fe8acdaaa30] main decoder error: failed to create audio output
[000055afa7d41720] vlcpulse audio output error: digital pass-through stream connection failure: Input/Output error
[000055afa7d41720] main audio output error: module not functional
[00007fe8acdaaa30] main decoder error: failed to create audio output
[00007fe894005d20] gl gl: Initialized libplacebo v4.157.0 (API v157)
libva info: VA-API version 1.13.0
libva error: vaGetDriverNameByIndex() failed with unknown libva error, driver_name = (null)
[00007fe894005d20] glconv_vaapi_x11 gl error: vaInitialize: unknown libva error
libva info: VA-API version 1.13.0
libva info: Trying to open /usr/lib64/dri/iHD_drv_video.so
libva info: va_openDriver() returns -1
libva info: Trying to open /usr/lib64/dri/i965_drv_video.so
libva info: va_openDriver() returns -1
[00007fe894005d20] glconv_vaapi_drm gl error: vaInitialize: unknown libva error
libva info: VA-API version 1.13.0
libva info: Trying to open /usr/lib64/dri/iHD_drv_video.so
libva info: va_openDriver() returns -1
[00007fe894005d20] glconv_vaapi_drm gl error: vaInitialize: unknown libva error
libva info: VA-API version 1.13.0
libva error: vaGetDriverNameByIndex() failed with unknown libva error, driver_name = (null)
[00007fe894005d20] glconv_vaapi_drm gl error: vaInitialize: unknown libva error
libva info: VA-API version 1.13.0
libva error: vaGetDriverNameByIndex() failed with unknown libva error, driver_name = (null)
[00007fe894005d20] glconv_vaapi_drm gl error: vaInitialize: unknown libva error
[00007fe894005d20] gl gl: Initialized libplacebo v4.157.0 (API v157)
Xlib: extension “NV-GLX” missing on display “:1”.
Xlib: extension “NV-GLX” missing on display “:1”.
[00007fe894005d20] gl gl: Initialized libplacebo v4.157.0 (API v157)
uint DBusMenuExporterDBus::GetLayout(int, int, const QStringList&, DBusMenuLayoutItem&): Condition failed: menu
QObject::~QObject: Timers cannot be stopped from another thread

System info (inxi -Faz)

System:
Kernel: 5.16.9-200.fc35.x86_64 x86_64 bits: 64 compiler: gcc
v: 2.37-10.fc35
parameters: BOOT_IMAGE=(hd1,gpt2)/vmlinuz-5.16.9-200.fc35.x86_64
root=UUID=3194dff3-054c-4207-a389-80cecdcb9f97 ro
rootflags=subvol=root rhgb quiet rd.driver.blacklist=nouveau
modprobe.blacklist=nouveau nvidia-drm.modeset=1
Desktop: KDE Plasma 5.23.5 tk: Qt 5.15.2 wm: kwin_wayland vt: 1
dm: SDDM Distro: Fedora release 35 (Thirty Five)
Machine:
Type: Laptop System: Notebook product: P95xER v: N/A
serial: Chassis: No Enclosure type: 10
serial:
Mobo: Notebook model: P95xER serial:
UEFI: American Megatrends v: 1.07.15 date: 11/16/2018
Battery:
ID-1: BAT0 charge: 44.6 Wh (89.2%) condition: 50.0/53.2 Wh (94.0%)
volts: 16.5 min: 15.2 model: Notebook BAT type: Li-ion
serial: status: N/A
CPU:
Info: model: Intel Core i7-8750H bits: 64 type: MT MCP
arch: Coffee Lake family: 6 model-id: 0x9E (158)
stepping: 0xA (10) microcode: 0xEC
Topology: cpus: 1x cores: 6 tpc: 2 threads: 12 smt: enabled
cache: L1: 384 KiB desc: d-6x32 KiB; i-6x32 KiB L2: 1.5 MiB
desc: 6x256 KiB L3: 9 MiB desc: 1x9 MiB
Speed (MHz): avg: 850 high: 900 min/max: 800/4100 scaling:
driver: intel_pstate governor: powersave cores: 1: 800 2: 800
3: 800 4: 803 5: 900 6: 900 7: 900 8: 900 9: 900 10: 900 11: 800
12: 800 bogomips: 52799
Flags: avx avx2 ht lm nx pae sse sse2 sse3 sse4_1 sse4_2 ssse3 vmx
Vulnerabilities:
Type: itlb_multihit status: KVM: VMX disabled
Type: l1tf mitigation: PTE Inversion; VMX: conditional cache
flushes, SMT vulnerable
Type: mds mitigation: Clear CPU buffers; SMT vulnerable
Type: meltdown mitigation: PTI
Type: spec_store_bypass
mitigation: Speculative Store Bypass disabled via prctl
Type: spectre_v1 mitigation: usercopy/swapgs barriers and __user
pointer sanitization
Type: spectre_v2 mitigation: Full generic retpoline, IBPB:
conditional, IBRS_FW, STIBP: conditional, RSB filling
Type: srbds mitigation: Microcode
Type: tsx_async_abort status: Not affected
Graphics:
Device-1: Intel CoffeeLake-H GT2 [UHD Graphics 630]
vendor: CLEVO/KAPOK driver: i915 v: kernel bus-ID: 00:02.0
chip-ID: 8086:3e9b class-ID: 0300
Device-2: NVIDIA GP104M [GeForce GTX 1070 Mobile]
vendor: CLEVO/KAPOK driver: nvidia v: 510.47.03
alternate: nouveau,nvidia_drm bus-ID: 01:00.0 chip-ID: 10de:1ba1
class-ID: 0300
Device-3: Chicony Chicony USB 2.0 Camera type: USB
driver: uvcvideo bus-ID: 1-8:2 chip-ID: 04f2:b5a7 class-ID: 0e02
Display: wayland server: X.Org 1.21.1.4 compositor: kwin_wayland
driver: loaded: intel,nvidia display-ID: :1 screens: 1
Screen-1: 0 s-res: 1920x1080 s-dpi: 96
s-size: 508x285mm (20.0x11.2") s-diag: 582mm (22.9")
Monitor-1: XWAYLAND0 res: 1920x1080 hz: 60 dpi: 139
size: 350x190mm (13.8x7.5") diag: 398mm (15.7")
OpenGL: renderer: Mesa Intel UHD Graphics 630 (CFL GT2)
v: 4.6 Mesa 21.3.6 direct render: Yes
Audio:
Device-1: Intel Cannon Lake PCH cAVS vendor: CLEVO/KAPOK
driver: snd_hda_intel v: kernel
alternate: snd_soc_skl,snd_sof_pci_intel_cnl bus-ID: 00:1f.3
chip-ID: 8086:a348 class-ID: 0403
Device-2: NVIDIA GP104 High Definition Audio
driver: snd_hda_intel v: kernel bus-ID: 01:00.1 chip-ID: 10de:10f0
class-ID: 0403
Sound Server-1: ALSA v: k5.16.9-200.fc35.x86_64 running: yes
Sound Server-2: PulseAudio v: 15.0 running: no
Sound Server-3: PipeWire v: 0.3.45 running: yes
Network:
Device-1: Intel Wireless-AC 9260 vendor: Rivet Networks
driver: iwlwifi v: kernel bus-ID: 03:00.0 chip-ID: 8086:2526
class-ID: 0280
IF: wlp3s0 state: up mac:
Device-2: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet
vendor: CLEVO/KAPOK driver: r8169 v: kernel port: 3000
bus-ID: 04:00.0 chip-ID: 10ec:8168 class-ID: 0200
IF: enp4s0 state: down mac:
IF-ID-1: proton0 state: unknown speed: 10 Mbps duplex: full
mac: N/A
Bluetooth:
Device-1: Intel Wireless-AC 9260 Bluetooth Adapter type: USB
driver: btusb v: 0.8 bus-ID: 1-14:4 chip-ID: 8087:0025
class-ID: e001
Report: rfkill ID: hci0 rfk-id: 2 state: down
bt-service: enabled,running rfk-block: hardware: no software: yes
address: see --recommends
Drives:
Local Storage: total: 2.05 TiB used: 450.72 GiB (21.5%)
SMART Message: Unable to run smartctl. Root privileges required.
ID-1: /dev/nvme0n1 maj-min: 259:0 vendor: Samsung
model: SSD 960 EVO 250GB size: 232.89 GiB block-size:
physical: 512 B logical: 512 B speed: 31.6 Gb/s lanes: 4
type: SSD serial: rev: 3B7QCXE7 temp: 45.9 C
scheme: GPT
ID-2: /dev/sda maj-min: 8:0 vendor: Seagate
model: ST2000LX001-1RG174 size: 1.82 TiB block-size:
physical: 4096 B logical: 512 B speed: 6.0 Gb/s type: HDD
rpm: 5400 serial: rev: SDM1
Partition:
ID-1: / raw-size: 231.3 GiB size: 231.3 GiB (100.00%)
used: 158.08 GiB (68.3%) fs: btrfs dev: /dev/nvme0n1p3
maj-min: 259:3
ID-2: /boot raw-size: 1024 MiB size: 973.4 MiB (95.06%)
used: 254.6 MiB (26.2%) fs: ext4 dev: /dev/nvme0n1p2
maj-min: 259:2
ID-3: /boot/efi raw-size: 600 MiB size: 598.8 MiB (99.80%)
used: 13.8 MiB (2.3%) fs: vfat dev: /dev/nvme0n1p1 maj-min: 259:1
ID-4: /home raw-size: 231.3 GiB size: 231.3 GiB (100.00%)
used: 158.08 GiB (68.3%) fs: btrfs dev: /dev/nvme0n1p3
maj-min: 259:3
Swap:
Kernel: swappiness: 60 (default) cache-pressure: 100 (default)
ID-1: swap-1 type: zram size: 8 GiB used: 0 KiB (0.0%)
priority: 100 dev: /dev/zram0
Sensors:
System Temperatures: cpu: 62.0 C pch: 71.0 C mobo: N/A
Fan Speeds (RPM): N/A
Info:
Processes: 444 Uptime: 13h 2m wakeups: 7 Memory: 31.2 GiB
used: 6.8 GiB (21.8%) Init: systemd v: 249 runlevel: 5
target: graphical.target tool: systemctl Compilers: gcc: 11.2.1
Packages: note: see --pkg flatpak: 43 Shell: Zsh v: 5.8.1
running-in: alacritty inxi: 3.3.12

Not sure where to report this, as mpv-player org closed a similar issue in September 2021, stating it was caused by a broken pipewire build in the linux distro: Strange LibJack Problem · Issue #9226 · mpv-player/mpv · GitHub

1 Like

Would you like to install:

sudo dnf install libva-intel-driver intel-media-driver

To make sure everything working properly, may be you need to reboot first.

Thanks for your reply.

installed the suggested drivers and rebooted.
mpv still has same error and won’t play videos.
vlc still has same playback issue.

Terminal output of vlc when playing a video, after installing drivers
VLC media player 3.0.16 Vetinari (revision 3.0.13-8-g41878ff4f2)
[00005653f96b3b70] main libvlc: Kjører VLC med standardbrukerflaten. Bruk «cvlc» for å kjøre VLC uten en brukerflate.
[00005653f9796720] main audio output error: too low audio sample frequency (0)
[00007f3b98d54430] main decoder error: failed to create audio output
[00005653f9796720] vlcpulse audio output error: digital pass-through stream connection failure: Input/Output error
[00005653f9796720] main audio output error: module not functional
[00007f3b98d54430] main decoder error: failed to create audio output
[00007f3b98c62060] gl gl: Initialized libplacebo v4.157.0 (API v157)
libva info: VA-API version 1.13.0
libva error: vaGetDriverNameByIndex() failed with unknown libva error, driver_name = (null)
[00007f3b98c62060] glconv_vaapi_x11 gl error: vaInitialize: unknown libva error
libva info: VA-API version 1.13.0
libva info: Trying to open /usr/lib64/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_13
libva info: va_openDriver() returns 0
[00007f3b98c5e6e0] avcodec decoder: Using Intel iHD driver for Intel(R) Gen Graphics - 21.4.3 () for hardware decoding
[h264 @ 0x7f3b98d374c0] get_buffer() failed
[h264 @ 0x7f3b98d374c0] thread_get_buffer() failed
[h264 @ 0x7f3b98d374c0] decode_slice_header error
[h264 @ 0x7f3b98d374c0] no frame!
[h264 @ 0x7f3b98cd1540] get_buffer() failed
[h264 @ 0x7f3b98cd1540] thread_get_buffer() failed
[h264 @ 0x7f3b98cd1540] decode_slice_header error
[h264 @ 0x7f3b98cd1540] no frame!
uint DBusMenuExporterDBus::GetLayout(int, int, const QStringList&, DBusMenuLayoutItem&): Condition failed: menu
uint DBusMenuExporterDBus::GetLayout(int, int, const QStringList&, DBusMenuLayoutItem&): Condition failed: menu
QObject::~QObject: Timers cannot be stopped from another thread

Did you make any changes to your audio setup or do you use the default Pipewire installation of Fedora?

1 Like

Hi, the error related with return -1 when playing VLC already gone. The other thing is, I guess, your Nvidia Card. Where your installation source for Nvidia? RPMFussion or directly from Nvidia?

If you’re using installation source from RPMFussion, I suggest to read this pages also for further setup (multi-monitor?).

I’m not sure, I’ve had this install since May so I might have done some workarounds when Fedora’s pipewire implementation had some bugs. But I can’t remember😅. I think it’s the default install now. I’ve got easyeffects installed, if it matters. These are the fIles in /usr/share/pipewire/:

pipewire-pulse.conf

PulseAudio config file for PipeWire version “0.3.45”

Copy and edit this file in /etc/pipewire for system-wide changes

or in ~/.config/pipewire for local changes.

context.properties = {
## Configure properties in the system.
#mem.warn-mlock = false
#mem.allow-mlock = true
#mem.mlock-all = false
#log.level = 2

#default.clock.quantum-limit = 8192

}

context.spa-libs = {
audio.convert.* = audioconvert/libspa-audioconvert
support.* = support/libspa-support
}

context.modules = [
{ name = libpipewire-module-rt
args = {
nice.level = -11
#rt.prio = 88
#rt.time.soft = -1
#rt.time.hard = -1
}
flags = [ ifexists nofail ]
}
{ name = libpipewire-module-protocol-native }
{ name = libpipewire-module-client-node }
{ name = libpipewire-module-adapter }
{ name = libpipewire-module-metadata }

{ name = libpipewire-module-protocol-pulse
    args = {
        # the addresses this server listens on
        server.address = [
            "unix:native"
            #"unix:/tmp/something"              # absolute paths may be used
            #"tcp:4713"                         # IPv4 and IPv6 on all addresses
            #"tcp:[::]:9999"                    # IPv6 on all addresses
            #"tcp:127.0.0.1:8888"               # IPv4 on a single address
            #
            #{ address = "tcp:4713"             # address
            #  max-clients = 64                 # maximum number of clients
            #  listen-backlog = 32              # backlog in the server listen queue
            #  client.access = "restricted"     # permissions for clients
            #}
        ]
        #pulse.min.req          = 256/48000     # 5ms
        #pulse.default.req      = 960/48000     # 20 milliseconds
        #pulse.min.frag         = 256/48000     # 5ms
        #pulse.default.frag     = 96000/48000   # 2 seconds
        #pulse.default.tlength  = 96000/48000   # 2 seconds
        #pulse.min.quantum      = 256/48000     # 5ms
        #pulse.default.format   = F32
        #pulse.default.position = [ FL FR ]
        # These overrides are only applied when running in a vm.
        vm.overrides = {
            pulse.min.quantum = 1024/48000      # 22ms
        }
    }
}

]

Extra modules can be loaded here. Setup in default.pa can be moved here

context.exec = [
#{ path = “pactl” args = “load-module module-switch-on-connect” }
#{ path = “/usr/bin/sh” args = “~/.config/pipewire/default.pw” }
]

stream.properties = {
#node.latency = 1024/48000
#node.autoconnect = true
#resample.quality = 4
#channelmix.normalize = true
#channelmix.mix-lfe = false
#channelmix.upmix = false
#channelmix.lfe-cutoff = 0
}

client/stream specific properties

pulse.rules = [
{
matches = [
{
# all keys must match the value. ~ starts regex.
#client.name = “Firefox”
#application.process.binary = “teams”
#application.name = “~speech-dispatcher."
}
]
actions = {
update-props = {
#node.latency = 512/48000
}
# Possible quirks:"
# force-s16-info forces sink and source info as S16 format
# remove-capture-dont-move removes the capture DONT_MOVE flag
#quirks = [ ]
}
}
{
# skype does not want to use devices that don’t have an S16 sample format.
matches = [
{ application.process.binary = “teams” }
{ application.process.binary = “skypeforlinux” }
]
actions = { quirks = [ force-s16-info ] }
}
{
# firefox marks the capture streams as don’t move and then they
# can’t be moved with pavucontrol or other tools.
matches = [ { application.process.binary = “firefox” } ]
actions = { quirks = [ remove-capture-dont-move ] }
}
{
# speech dispatcher asks for too small latency and then underruns.
matches = [ { application.name = "~speech-dispatcher
” } ]
actions = {
update-props = {
pulse.min.req = 1024/48000 # 21ms
pulse.min.quantum = 1024/48000 # 21ms
}
}
}
]

client-rt.conf

Real-time Client config file for PipeWire version “0.3.45”

Copy and edit this file in /etc/pipewire for system-wide changes

or in ~/.config/pipewire for local changes.

context.properties = {
## Configure properties in the system.
#mem.warn-mlock = false
#mem.allow-mlock = true
#mem.mlock-all = false
log.level = 0

#default.clock.quantum-limit = 8192

}

context.spa-libs = {
# =
#
# Used to find spa factory names. It maps an spa factory name
# regular expression to a library name that should contain
# that factory.
#
audio.convert.* = audioconvert/libspa-audioconvert
support.* = support/libspa-support
}

context.modules = [
#{ name =
# [ args = { = … } ]
# [ flags = [ [ ifexists ] [ nofail ] ]
#}
#
# Loads a module with the given parameters.
# If ifexists is given, the module is ignored when it is not found.
# If nofail is given, module initialization failures are ignored.
#
# Uses realtime scheduling to boost the audio thread priorities
{ name = libpipewire-module-rt
args = {
#rt.prio = 88
#rt.time.soft = -1
#rt.time.hard = -1
}
flags = [ ifexists nofail ]
}

# The native communication protocol.
{ name = libpipewire-module-protocol-native }

# Allows creating nodes that run in the context of the
# client. Is used by all clients that want to provide
# data to PipeWire.
{ name = libpipewire-module-client-node }

# Allows creating devices that run in the context of the
# client. Is used by the session manager.
{ name = libpipewire-module-client-device }

# Makes a factory for wrapping nodes in an adapter with a
# converter and resampler.
{ name = libpipewire-module-adapter }

# Allows applications to create metadata objects. It creates
# a factory for Metadata objects.
{ name = libpipewire-module-metadata }

# Provides factories to make session manager objects.
{ name = libpipewire-module-session-manager }

]

filter.properties = {
#node.latency = 1024/48000
}

stream.properties = {
#node.latency = 1024/48000
#node.autoconnect = true
#resample.quality = 4
#channelmix.normalize = true
#channelmix.mix-lfe = true
#channelmix.upmix = false
#channelmix.lfe-cutoff = 0
}

jack.conf

JACK client config file for PipeWire version “0.3.47”

Copy and edit this file in /etc/pipewire for system-wide changes

or in ~/.config/pipewire for local changes.

It is also possible to place a file with an updated section in

/etc/pipewire/jack.conf.d/ for system-wide changes or in

~/.config/pipewire/jack.conf.d/ for local changes.

context.properties = {
## Configure properties in the system.
#mem.warn-mlock = false
#mem.allow-mlock = true
#mem.mlock-all = false
log.level = 0

#default.clock.quantum-limit = 8192

}

context.spa-libs = {
# =
#
# Used to find spa factory names. It maps an spa factory name
# regular expression to a library name that should contain
# that factory.
#
support.* = support/libspa-support
}

context.modules = [
#{ name =
# [ args = { = … } ]
# [ flags = [ [ ifexists ] [ nofail ] ]
#}
#
# Loads a module with the given parameters.
# If ifexists is given, the module is ignored when it is not found.
# If nofail is given, module initialization failures are ignored.
#
#
# Boost the data thread priority.
{ name = libpipewire-module-rt
args = {
#rt.prio = 88
#rt.time.soft = -1
#rt.time.hard = -1
}
flags = [ ifexists nofail ]
}

# The native communication protocol.
{ name = libpipewire-module-protocol-native }

# Allows creating nodes that run in the context of the
# client. Is used by all clients that want to provide
# data to PipeWire.
{ name = libpipewire-module-client-node }

# Allows applications to create metadata objects. It creates
# a factory for Metadata objects.
{ name = libpipewire-module-metadata }

]

global properties for all jack clients

jack.properties = {
#node.latency = 1024/48000
#node.rate = 1/48000
#node.quantum = 1024/48000
#node.lock-quantum = true
#node.force-quantum = 0
jack.show-monitor = true
jack.merge-monitor = false
jack.short-name = false
jack.filter-name = false
#
# allow: Don’t restrict self connect requests
# fail-external: Fail self connect requests to external ports only
# ignore-external: Ignore self connect requests to external ports only
# fail-all: Fail all self connect requests
# ignore-all: Ignore all self connect requests
jack.self-connect-mode = allow
jack.locked-process = true
jack.default-as-system = false
}

client specific properties

jack.rules = [
{
matches = [
{
# all keys must match the value. ~ starts regex.
#client.name = “Carla”
#application.process.binary = “jack_simple_client”
#application.name = “~jack_simple_client.*”
}
]
actions = {
update-props = {
#node.latency = 512/48000
}
}
}
]

client.conf

Client config file for PipeWire version “0.3.45”

Copy and edit this file in /etc/pipewire for system-wide changes

or in ~/.config/pipewire for local changes.

context.properties = {
## Configure properties in the system.
#mem.warn-mlock = false
#mem.allow-mlock = true
#mem.mlock-all = false
log.level = 0

#default.clock.quantum-limit = 8192

}

context.spa-libs = {
# =
#
# Used to find spa factory names. It maps an spa factory name
# regular expression to a library name that should contain
# that factory.
#
audio.convert.* = audioconvert/libspa-audioconvert
support.* = support/libspa-support
}

context.modules = [
#{ name =
# [ args = { = … } ]
# [ flags = [ [ ifexists ] [ nofail ] ]
#}
#
# Loads a module with the given parameters.
# If ifexists is given, the module is ignored when it is not found.
# If nofail is given, module initialization failures are ignored.
#

# The native communication protocol.
{ name = libpipewire-module-protocol-native }

# Allows creating nodes that run in the context of the
# client. Is used by all clients that want to provide
# data to PipeWire.
{ name = libpipewire-module-client-node }

# Allows creating devices that run in the context of the
# client. Is used by the session manager.
{ name = libpipewire-module-client-device }

# Makes a factory for wrapping nodes in an adapter with a
# converter and resampler.
{ name = libpipewire-module-adapter }

# Allows applications to create metadata objects. It creates
# a factory for Metadata objects.
{ name = libpipewire-module-metadata }

# Provides factories to make session manager objects.
{ name = libpipewire-module-session-manager }

]

filter.properties = {
#node.latency = 1024/48000
}

stream.properties = {
#node.latency = 1024/48000
#node.autoconnect = true
#resample.quality = 4
#channelmix.normalize = true
#channelmix.mix-lfe = false
#channelmix.upmix = false
#channelmix.lfe-cutoff = 0
}

pipewire.conf

Daemon config file for PipeWire version “0.3.45”

Copy and edit this file in /etc/pipewire for system-wide changes

or in ~/.config/pipewire for local changes.

context.properties = {
## Configure properties in the system.
#library.name.system = support/libspa-support
#context.data-loop.library.name.system = support/libspa-support
#support.dbus = true
#link.max-buffers = 64
link.max-buffers = 16 # version < 3 clients can’t handle more
#mem.warn-mlock = false
#mem.allow-mlock = true
#mem.mlock-all = false
#clock.power-of-two-quantum = true
#log.level = 2
#cpu.zero.denormals = true

core.daemon = true              # listening for socket connections
core.name   = pipewire-0        # core name and socket name

## Properties for the DSP configuration.
#default.clock.rate          = 48000
#default.clock.allowed-rates = [ 48000 ]
#default.clock.quantum       = 1024
#default.clock.min-quantum   = 32
#default.clock.max-quantum   = 2048
#default.clock.quantum-limit = 8192
#default.video.width         = 640
#default.video.height        = 480
#default.video.rate.num      = 25
#default.video.rate.denom    = 1
#
#settings.check-quantum      = false
#settings.check-rate         = false
#
# These overrides are only applied when running in a vm.
vm.overrides = {
    default.clock.min-quantum = 1024
}

}

context.spa-libs = {
# =
#
# Used to find spa factory names. It maps an spa factory name
# regular expression to a library name that should contain
# that factory.
#
audio.convert.* = audioconvert/libspa-audioconvert
api.alsa.* = alsa/libspa-alsa
api.v4l2.* = v4l2/libspa-v4l2
api.libcamera.* = libcamera/libspa-libcamera
api.bluez5.* = bluez5/libspa-bluez5
api.vulkan.* = vulkan/libspa-vulkan
api.jack.* = jack/libspa-jack
support.* = support/libspa-support
#videotestsrc = videotestsrc/libspa-videotestsrc
#audiotestsrc = audiotestsrc/libspa-audiotestsrc
}

context.modules = [
#{ name =
# [ args = { = … } ]
# [ flags = [ [ ifexists ] [ nofail ] ]
#}
#
# Loads a module with the given parameters.
# If ifexists is given, the module is ignored when it is not found.
# If nofail is given, module initialization failures are ignored.
#

# Uses realtime scheduling to boost the audio thread priorities. This uses
# RTKit if the user doesn't have permission to use regular realtime
# scheduling.
{ name = libpipewire-module-rt
    args = {
        nice.level    = -11
        #rt.prio      = 88
        #rt.time.soft = -1
        #rt.time.hard = -1
    }
    flags = [ ifexists nofail ]
}

# The native communication protocol.
{ name = libpipewire-module-protocol-native }

# The profile module. Allows application to access profiler
# and performance data. It provides an interface that is used
# by pw-top and pw-profiler.
{ name = libpipewire-module-profiler }

# Allows applications to create metadata objects. It creates
# a factory for Metadata objects.
{ name = libpipewire-module-metadata }

# Creates a factory for making devices that run in the
# context of the PipeWire server.
{ name = libpipewire-module-spa-device-factory }

# Creates a factory for making nodes that run in the
# context of the PipeWire server.
{ name = libpipewire-module-spa-node-factory }

# Allows creating nodes that run in the context of the
# client. Is used by all clients that want to provide
# data to PipeWire.
{ name = libpipewire-module-client-node }

# Allows creating devices that run in the context of the
# client. Is used by the session manager.
{ name = libpipewire-module-client-device }

# The portal module monitors the PID of the portal process
# and tags connections with the same PID as portal
# connections.
{ name = libpipewire-module-portal
    flags = [ ifexists nofail ]
}

# The access module can perform access checks and block
# new clients.
{ name = libpipewire-module-access
    args = {
        # access.allowed to list an array of paths of allowed
        # apps.
        #access.allowed = [
        #    /usr/bin/pipewire-media-session
        #]

        # An array of rejected paths.
        #access.rejected = [ ]

        # An array of paths with restricted access.
        #access.restricted = [ ]

        # Anything not in the above lists gets assigned the
        # access.force permission.
        #access.force = flatpak
    }
}

# Makes a factory for wrapping nodes in an adapter with a
# converter and resampler.
{ name = libpipewire-module-adapter }

# Makes a factory for creating links between ports.
{ name = libpipewire-module-link-factory }

# Provides factories to make session manager objects.
{ name = libpipewire-module-session-manager }

# Use libcanberra to play X11 Bell
#{ name = libpipewire-module-x11-bell
#  args = {
#      #sink.name = ""
#      #sample.name = "bell-window-system"
#      #x11.display = null
#      #x11.xauthority = null
#  }
#}

]

context.objects = [
#{ factory =
# [ args = { = … } ]
# [ flags = [ [ nofail ] ]
#}
#
# Creates an object from a PipeWire factory with the given parameters.
# If nofail is given, errors are ignored (and no object is created).
#
#{ factory = spa-node-factory args = { factory.name = videotestsrc node.name = videotestsrc Spa:Pod:Object:Param:Props:patternType = 1 } }
#{ factory = spa-device-factory args = { factory.name = api.jack.device foo=bar } flags = [ nofail ] }
#{ factory = spa-device-factory args = { factory.name = api.alsa.enum.udev } }
#{ factory = spa-node-factory args = { factory.name = api.alsa.seq.bridge node.name = Internal-MIDI-Bridge } }
#{ factory = adapter args = { factory.name = audiotestsrc node.name = my-test } }
#{ factory = spa-node-factory args = { factory.name = api.vulkan.compute.source node.name = my-compute-source } }

# A default dummy driver. This handles nodes marked with the "node.always-driver"
# property when no other driver is currently active. JACK clients need this.
{ factory = spa-node-factory
    args = {
        factory.name    = support.node.driver
        node.name       = Dummy-Driver
        node.group      = pipewire.dummy
        priority.driver = 20000
    }
}
{ factory = spa-node-factory
    args = {
        factory.name    = support.node.driver
        node.name       = Freewheel-Driver
        priority.driver = 19000
        node.group      = pipewire.freewheel
        node.freewheel  = true
    }
}
# This creates a new Source node. It will have input ports
# that you can link, to provide audio for this source.
#{ factory = adapter
#    args = {
#        factory.name     = support.null-audio-sink
#        node.name        = "my-mic"
#        node.description = "Microphone"
#        media.class      = "Audio/Source/Virtual"
#        audio.position   = "FL,FR"
#    }
#}

# This creates a single PCM source device for the given
# alsa device path hw:0. You can change source to sink
# to make a sink in the same way.
#{ factory = adapter
#    args = {
#        factory.name           = api.alsa.pcm.source
#        node.name              = "alsa-source"
#        node.description       = "PCM Source"
#        media.class            = "Audio/Source"
#        api.alsa.path          = "hw:0"
#        api.alsa.period-size   = 1024
#        api.alsa.headroom      = 0
#        api.alsa.disable-mmap  = false
#        api.alsa.disable-batch = false
#        audio.format           = "S16LE"
#        audio.rate             = 48000
#        audio.channels         = 2
#        audio.position         = "FL,FR"
#    }
#}

]

context.exec = [
#{ path = [ args = “” ] }
#
# Execute the given program with arguments.
#
# You can optionally start the session manager here,
# but it is better to start it as a systemd service.
# Run the session manager with -h for options.
#
#{ path = “/usr/bin/pipewire-media-session” args = “” }
#
# You can optionally start the pulseaudio-server here as well
# but it is better to start it as a systemd service.
# It can be interesting to start another daemon here that listens
# on another address with the -a option (eg. -a tcp:4713).
#
#{ path = “/usr/bin/pipewire” args = “-c pipewire-pulse.conf” }
]

minimal.conf

RPMfusion. I needed to put a tweaked config file in /etc/X11/xorg.conf.d/ to get display output (HDMI) working, but I did that long before mpv stopped working. It may have some correlation with vlc dropping frames though.

/etc/X11/xorg.conf.d/nvidia.conf

#This file is provided by xorg-x11-drv-nvidia
#Do not edit

Section “ServerLayout”
Identifier “layout”
Screen 0 “intel”
Screen 1 “nvidia”
Option “AllowNVIDIAGPUScreens”
EndSection

Section “Device”
Identifier “intel”
Driver “intel”
BusID “PCI:0@0:2:0”
EndSection

Section “Device”
Identifier “nvidia”
Driver “nvidia”
BusID “PCI:1@0:0:0”
Option “ConstrainCursor” “off”
EndSection

Section “OutputClass”
Identifier “nvidia”
MatchDriver “nvidia-drm”
Driver “nvidia”
Option “AllowEmptyInitialConfiguration”
Option “SLI” “Auto”
Option “BaseMosaic” “on”
EndSection

Section “Screen”
Identifier “intel”
Device “intel”
EndSection

Section “Screen”
Identifier “nvidia”
Device “nvidia”
Option “AllowEmptyInitialConfiguration” “on”
Option “IgnoreDisplayDevices” “CRT”
EndSection

1 Like

mpv works fine for me here. Can you check your package versions?

$ rpm -qa \*pipewire\* \*mpv\*
pipewire0.2-libs-0.2.7-6.fc35.x86_64
mpv-0.34.1-2.fc35.x86_64
pipewire-0.3.45-2.fc35.x86_64
pipewire-libs-0.3.45-2.fc35.x86_64
pipewire-jack-audio-connection-kit-0.3.45-2.fc35.x86_64
pipewire-alsa-0.3.45-2.fc35.x86_64
pipewire-gstreamer-0.3.45-2.fc35.x86_64
pipewire-pulseaudio-0.3.45-2.fc35.x86_64
pipewire-utils-0.3.45-2.fc35.x86_64
2 Likes

sure

rpm -qa \*pipewire\* \*mpv\* \*vlc\*

mpv-0.34.1-2.fc35.x86_64
pipewire-libs-0.3.45-2.fc35.i686
pipewire-0.3.45-2.fc35.i686
pipewire-alsa-0.3.45-2.fc35.i686
pipewire-libs-0.3.45-2.fc35.x86_64
pipewire-0.3.45-2.fc35.x86_64
pipewire-alsa-0.3.45-2.fc35.x86_64
pipewire-gstreamer-0.3.45-2.fc35.x86_64
pipewire-pulseaudio-0.3.45-2.fc35.x86_64
pipewire-utils-0.3.45-2.fc35.x86_64
pipewire-jack-audio-connection-kit-0.3.47-1.fc35.x86_64
vlc-core-3.0.16-5.fc35.x86_64
vlc-3.0.16-5.fc35.x86_64
2 Likes

Please run an update, pipewire 0.3.47 is available.

looking at your config files posted above:
jack.conf indicates it’s for 0.3.47 while the rest are for 0.3.45.

thanks

4 Likes

yup, that fixed mpv. Thanks!
Offline updates initiated through Discover on KDE workstation spin have a tendency to -not- update all packages (at least on my machine). This might be the case here. The logical next step would be to fix that, but I’m out of troubleshooting time for now.

vlc still has the same bug, but mpv is my main player anyway so that doesn’t bother me.

VLC output after updating pipewire

VLC media player 3.0.16 Vetinari (revision 3.0.13-8-g41878ff4f2)
[00005599dc8f7b70] main libvlc: Kjører VLC med standardbrukerflaten. Bruk «cvlc» for å kjøre VLC uten en brukerflate.
[00007f00d0005d20] gl gl: Initialized libplacebo v4.157.0 (API v157)
libva info: VA-API version 1.13.0
libva error: vaGetDriverNameByIndex() failed with unknown libva error, driver_name = (null)
[00007f00d0005d20] glconv_vaapi_x11 gl error: vaInitialize: unknown libva error
libva info: VA-API version 1.13.0
libva info: Trying to open /usr/lib64/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_13
libva info: va_openDriver() returns 0
[00007f00e1a2bd40] avcodec decoder: Using Intel iHD driver for Intel(R) Gen Graphics - 21.4.3 () for hardware decoding
uint DBusMenuExporterDBus::GetLayout(int, int, const QStringList&, DBusMenuLayoutItem&): Condition failed: menu
QObject::~QObject: Timers cannot be stopped from another thread

1 Like

For VLC, may be you want to change the settings video output from automatic to other, like OpenGL.

I avoid the occasional issues with the offline updates by using a crontab entry and doing the updates with dnf at ~2:15 am every night

This shouldn’t happen, unless the repos were in an inconsistent state and it found package A but not B for updates. I tend to use dnf offline-upgrade --refresh now, but when I do look at gnome-software for updates, I always hit the “reload”/“refresh” button to ensure that it has the latest metadata.