Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
Issues with OBS and pipewire not emulating pulseaudio server
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index Multimedia
View previous topic :: View next topic  
Author Message
world_is_a_fun
n00b
n00b


Joined: 02 Apr 2024
Posts: 3

PostPosted: Tue Apr 02, 2024 10:25 pm    Post subject: Issues with OBS and pipewire not emulating pulseaudio server Reply with quote

This is a bit of a rabbithole (at least, for my inexperienced self). My original goal was to record videos locally using OBS Studio. I have had various problems with the software, but the specific one I'm aiming to solve first involves audio. OBS Studio requires pulse audio according to the support I received in their discord (then why does it have a pipewire useflag?), however I use pipewire. Checking my obs logfile, it was discovered that it could not get any information on the pulseaudio server and was using alsa instead. This led me to recheck my pipewire setup to confirm the pulseaudio server emulation was working, however I instead found problems.

When running
Code:
user$ LANG=C pactl info | grep "Server Name"


the output is (and the same for running as root):
Code:
Connection failure: Connection refused
pa_context_connect() failed: Connection refused


I'm not sure what information is needed to help figure out what the issue is here (and hopefully fixing this also fixes my obs audio problems too). It should be noted that obs is the only application which has audio problems on my system. Here is some things that seem relevant:

.xinitrc
Code:

#!/bin/sh

# Option 1: Launch with a dbus session
exec dbus-launch --exit-with-session i3
# Option 2: launch without dbus
#exec i3


snippet of i3 config file where the launcher is launched
Code:

# pipewire
exec_always gentoo-pipewire-launcher &


Ive verified that the XDG_RUNTIME_DIR and DBUS_SESSION_BUS_ADDRESS are set by echoing them (looking at the pipewire wiki entry for reasons why its not working). The former is set by elogind (im pretty sure).

various ebuilds that seem like they might be relevant
Code:

[ebuild   R    ] media-libs/alsa-lib-1.2.10-r2::gentoo  USE="-alisp -debug -doc -python" ABI_X86="(64) -32 (-x32)" PYTHON_SINGLE_TARGET="python3_11 -python3_10" 0 KiB
[ebuild   R    ] media-sound/pulseaudio-16.1::gentoo  USE="bluetooth glib -daemon -jack -ofono-headset" ABI_X86="(64) -32 (-x32)" 0 KiB
[ebuild   R    ] sys-auth/elogind-246.10-r3::gentoo  USE="acl cgroup-hybrid pam policykit -audit -debug -doc (-selinux) -test" 0 KiB
[ebuild   R    ] sys-apps/dbus-1.15.8::gentoo  USE="X elogind -debug -doc (-selinux) -static-libs -systemd -test -valgrind" ABI_X86="32 (64) (-x32)" 0 KiB
[ebuild   R    ] media-video/pipewire-1.0.3:0/0.4::gentoo  USE="X bluetooth dbus jack-sdk pipewire-alsa readline sound-server ssl v4l -doc -echo-cancel -extra -ffmpeg -flatpak -gsettings -gstreamer -ieee1394 -jack-client -liblc3 -lv2 -man -modemmanager -roc (-selinux) (-system-service) -systemd -test -zeroconf" ABI_X86="(64) -32 (-x32)" 0 KiB
[ebuild   R   ~] media-video/obs-studio-30.1.0::gentoo  USE="alsa pipewire pulseaudio python speex ssl v4l -browser -decklink -fdk -jack -lua (-mpegts) -nvenc -qsv -test -truetype -vlc -wayland -websocket" LUA_SINGLE_TARGET="luajit" PYTHON_SINGLE_TARGET="python3_11 -python3_10 -python3_12" 0 KiB


It may also be worth mentioning that Im a little behind on my kernel updates. I havent had the time lately to sit down and rebuild my kernel. When I installed I used the general kernel.
Back to top
View user's profile Send private message
flexibeast
Guru
Guru


Joined: 04 Apr 2022
Posts: 452
Location: Naarm/Melbourne, Australia

PostPosted: Wed Apr 03, 2024 5:35 am    Post subject: Reply with quote

Can you confirm, e.g. by running:

Code:
$ pgrep -a wire

that there's a distinct PipeWire process making use of pipewire-pulse.conf, e.g.:

Code:
2817 /usr/bin/pipewire -c pipewire-pulse.conf

`gentoo-pipewire-launcher` attempts to start such a process, but startup might have been unsuccessful for some reason (or startup was successful, but the process has since fallen over).
Back to top
View user's profile Send private message
Chiitoo
Administrator
Administrator


Joined: 28 Feb 2010
Posts: 2730
Location: Here and Away Again

PostPosted: Wed Apr 03, 2024 5:58 am    Post subject: Reply with quote

When I added USE="pipewire", I had not been using PipeWire or PulseAudio really myself, only ALSA (which works just fine with OBS Studio, though of course depends on one's needs if it works for them).

As I've been looking into actually testing it and figuring it out, I've come to learn that it is for screen capture only, and only(?) on Wayland, so USE="screencast" might have been better for the current functionality.

I'm actually in the process of sorting it out now (again) myself...

I don't think it has been documented well upstream, or at all, and it is getting more confusing now that they are adding video capture (camera etc.) via PipeWire as well, and audio things are on their way too, yet there are no proper CMake switches for them (or at least for the latest release, there is just the one for PipeWire, and then some automagic to enable camera support).

That said, I would think that using PipeWire, as we have it, in place of PulseAudio should probably work too, but I'm quite unsure at this time.

Somewhat related, though it's about the video side:

- OBSstudio: No creen capture device for pipewire XSHM only
_________________
Kindest of regardses.
Back to top
View user's profile Send private message
world_is_a_fun
n00b
n00b


Joined: 02 Apr 2024
Posts: 3

PostPosted: Wed Apr 03, 2024 8:41 pm    Post subject: Reply with quote

flexibeast wrote:
Can you confirm, e.g. by running:

Code:
$ pgrep -a wire

that there's a distinct PipeWire process making use of pipewire-pulse.conf, e.g.:

Code:
2817 /usr/bin/pipewire -c pipewire-pulse.conf

`gentoo-pipewire-launcher` attempts to start such a process, but startup might have been unsuccessful for some reason (or startup was successful, but the process has since fallen over).


pgrep -a wire
Code:

3425 /usr/bin/wireplumber
3444 /usr/bin/pipewire
3449 /usr/bin/pipewire -c pipewire-pulse.conf


looks like there is.

Chiitoo wrote:

When I added USE="pipewire", I had not been using PipeWire or PulseAudio really myself, only ALSA (which works just fine with OBS Studio, though of course depends on one's needs if it works for them).

As I've been looking into actually testing it and figuring it out, I've come to learn that it is for screen capture only, and only(?) on Wayland, so USE="screencast" might have been better for the current functionality.

I'm actually in the process of sorting it out now (again) myself...

I don't think it has been documented well upstream, or at all, and it is getting more confusing now that they are adding video capture (camera etc.) via PipeWire as well, and audio things are on their way too, yet there are no proper CMake switches for them (or at least for the latest release, there is just the one for PipeWire, and then some automagic to enable camera support).

That said, I would think that using PipeWire, as we have it, in place of PulseAudio should probably work too, but I'm quite unsure at this time.

Somewhat related, though it's about the video side:

- OBSstudio: No creen capture device for pipewire XSHM only


Alsa works for microphone input, but not capturing desktop audio at all. I have discovered something that has me quite puzzled though. I use the strategy for sandboxing described here, and have one such sandbox set up for steam. I downloaded OBS on steam to see if that version would work (it did not, it wont run in proton and the steam version only works on MacOS and Windows for some reason), and in frustration, ran sudo -u sandbox-user obs, only to discover that without changing any configurations with my sound setup obs suddenly works. I swtich back to my primary user, and nope! still broken. The alsa input capture doesnt work, but thats likely because when I discovered this it was captured by a virtual machine, and I havent done a proper thorough test. I have no idea why it would be working for the steam sandbox user but not the regular user, and I'm very curious to find out why
Back to top
View user's profile Send private message
Chiitoo
Administrator
Administrator


Joined: 28 Feb 2010
Posts: 2730
Location: Here and Away Again

PostPosted: Thu Apr 04, 2024 11:27 am    Post subject: Reply with quote

Yeah, if the hardware can not record desktop audio, then a loopback device is needed for ALSA.

Something like this for example:

Code:

pcm.!default
{
   type asym
   playback.pcm "generic"
   #playback.pcm "correctedSurround"
   playback.pcm "loopAndReal"
   capture.pcm "loopRecord"
   #capture.pcm "usbii"

   hint
   {
      show on
   }
}

pcm.correctedSurround
{
   type plug
   slave.pcm "loopAndReal"
   #slave.pcm "xonarer"

   ttable
   {
      0.0 1   # Front Left
      1.1 1   # Front Right
      2.0 0.5   # Rear Left
      3.1 0.5   # Rear Right
      4.0 1   # Front Center
      4.1 1   # Front Center
      5.0 0.5   # Rear Center
      5.1 0.5   # Rear Center
   }

   hint
   {
      show on
   }
}

pcm.loopRecord
{
   type hw
   card "Loopback"
   #card "hw:0"
   device 1
   subdevice 0
}

pcm.loopAndReal
{
   type plug
   slave.pcm "binder"
   route_policy "duplicate"
}

pcm.binder
{
   type multi
   slaves.a.pcm "generic"
   slaves.a.channels 2
   slaves.b.pcm "looper"
   slaves.b.channels 2

   bindings.0.slave a
   bindings.0.channel 0
   bindings.1.slave a
   bindings.1.channel 1
   bindings.2.slave b
   bindings.2.channel 0
   bindings.3.slave b
   bindings.3.channel 1
}

pcm.looper
{
   type dmix
   ipc_key 1024
   ipc_key_add_uid 0
   ipc_perm 0666

   slave
   {
      pcm "hw:Loopback,0,0"
      rate 48000 # 44100, 48000, 96000 etc.
      #periods 2
      #period_time 0
      #period_size 1024
      period_size 2048
      #buffer_time 0
      buffer_size 8192
      #buffer_size 16384
      #format s16_le
      #format s32_le
   }
}

pcm.generic
{
   type dmix
   ipc_key 1028
   ipc_key_add_uid 0
   ipc_perm 0666

   slave
   {
      pcm "hw:0"
      rate 48000 # 44100, 48000, 96000 etc.
      #periods 2
      #period_time 0
      #period_size 1024
      period_size 2048
      #buffer_time 0
      buffer_size 8192
      #buffer_size 16384
      #format s16_le
      #format s32_le
   }
}

pcm.usbiii
{
   type dsnoop
   ipc_key 1032
   ipc_key_add_uid 0
   ipc_perm 0666

   hint
   {
      show on
   }

   slave
   {
      pcm "U0x46d0x81b"
      rate 48000 # 44100, 48000, 96000 etc.
      #periods 2
      #period_time 0
      #period_size 1024
      #buffer_time 0
      #buffer_size 8192
      #buffer_size 16384
      #format s16_le
   }
}

pcm.line
{
   type dsnoop
   ipc_key 1036
   ipc_key_add_uid 0
   ipc_perm 0666

   slave
   {
      pcm "hw:0"
      rate 48000 # 44100, 48000, 96000 etc.
      #periods 2
      #period_time 0
      #period_size 1024
      #buffer_time 0
      #buffer_size 8192
      #buffer_size 16384
      #format s16_le
   }
}

Not all of that is relevant to loopback, but you might get the idea (and perhaps other ideas).

Hrm, no immediate ideas come to me regarding the sandbox thing...
_________________
Kindest of regardses.
Back to top
View user's profile Send private message
world_is_a_fun
n00b
n00b


Joined: 02 Apr 2024
Posts: 3

PostPosted: Fri Apr 05, 2024 3:31 am    Post subject: Reply with quote

Chiitoo wrote:
Yeah, if the hardware can not record desktop audio, then a loopback device is needed for ALSA.

Something like this for example:

Code:

pcm.!default
{
   type asym
   playback.pcm "generic"
   #playback.pcm "correctedSurround"
   playback.pcm "loopAndReal"
   capture.pcm "loopRecord"
   #capture.pcm "usbii"

   hint
   {
      show on
   }
}

pcm.correctedSurround
{
   type plug
   slave.pcm "loopAndReal"
   #slave.pcm "xonarer"

   ttable
   {
      0.0 1   # Front Left
      1.1 1   # Front Right
      2.0 0.5   # Rear Left
      3.1 0.5   # Rear Right
      4.0 1   # Front Center
      4.1 1   # Front Center
      5.0 0.5   # Rear Center
      5.1 0.5   # Rear Center
   }

   hint
   {
      show on
   }
}

pcm.loopRecord
{
   type hw
   card "Loopback"
   #card "hw:0"
   device 1
   subdevice 0
}

pcm.loopAndReal
{
   type plug
   slave.pcm "binder"
   route_policy "duplicate"
}

pcm.binder
{
   type multi
   slaves.a.pcm "generic"
   slaves.a.channels 2
   slaves.b.pcm "looper"
   slaves.b.channels 2

   bindings.0.slave a
   bindings.0.channel 0
   bindings.1.slave a
   bindings.1.channel 1
   bindings.2.slave b
   bindings.2.channel 0
   bindings.3.slave b
   bindings.3.channel 1
}

pcm.looper
{
   type dmix
   ipc_key 1024
   ipc_key_add_uid 0
   ipc_perm 0666

   slave
   {
      pcm "hw:Loopback,0,0"
      rate 48000 # 44100, 48000, 96000 etc.
      #periods 2
      #period_time 0
      #period_size 1024
      period_size 2048
      #buffer_time 0
      buffer_size 8192
      #buffer_size 16384
      #format s16_le
      #format s32_le
   }
}

pcm.generic
{
   type dmix
   ipc_key 1028
   ipc_key_add_uid 0
   ipc_perm 0666

   slave
   {
      pcm "hw:0"
      rate 48000 # 44100, 48000, 96000 etc.
      #periods 2
      #period_time 0
      #period_size 1024
      period_size 2048
      #buffer_time 0
      buffer_size 8192
      #buffer_size 16384
      #format s16_le
      #format s32_le
   }
}

pcm.usbiii
{
   type dsnoop
   ipc_key 1032
   ipc_key_add_uid 0
   ipc_perm 0666

   hint
   {
      show on
   }

   slave
   {
      pcm "U0x46d0x81b"
      rate 48000 # 44100, 48000, 96000 etc.
      #periods 2
      #period_time 0
      #period_size 1024
      #buffer_time 0
      #buffer_size 8192
      #buffer_size 16384
      #format s16_le
   }
}

pcm.line
{
   type dsnoop
   ipc_key 1036
   ipc_key_add_uid 0
   ipc_perm 0666

   slave
   {
      pcm "hw:0"
      rate 48000 # 44100, 48000, 96000 etc.
      #periods 2
      #period_time 0
      #period_size 1024
      #buffer_time 0
      #buffer_size 8192
      #buffer_size 16384
      #format s16_le
   }
}

Not all of that is relevant to loopback, but you might get the idea (and perhaps other ideas).

Hrm, no immediate ideas come to me regarding the sandbox thing...


Well, for now it is a working fix to just use obs as the sandbox user. When I have the time I can try digging around in the configs to see if there is somehow something different about the local config of my user, or of the sandbox user. My thinking is that there must be something about the two which is different in configuration.
Back to top
View user's profile Send private message
Chiitoo
Administrator
Administrator


Joined: 28 Feb 2010
Posts: 2730
Location: Here and Away Again

PostPosted: Fri Apr 05, 2024 4:10 am    Post subject: Reply with quote

It does make me think of some kind of a permission issue, but as I'm not familiar with anything other than plain ALSA, I'm not sure.

I think I need to use a different machine to really exepiment with the PulseAudio and PipeWire things, as some of them seem to possibly reguire at least elogind and friends, which I don't have here.

I do have virtual machines, but they have their own quirks...
_________________
Kindest of regardses.
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Multimedia All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum