Pulse

Материал из wiki.nntc.nnov.ru
Версия от 09:29, 9 ноября 2023; Decoy (обсуждение | вклад) (Способ для MACOS)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску

Как прослушивать звук с удалённого компьютера на своём через локальную сеть посредством Pulseaudio

Введение

Этот способ актуален только для GNU/Linux систем, основным звуковым сервером которых является Pulseaudio. Что это такое и как оно соотносится с другими непонятными словами типа ALSA, OSS, JACK и прочим, читать здесь

Простой вариант

В этом варианте всё будет работать временно, после выполнения команды на машине-источника и машины-назначения. После перезагрузки машин потребуется повторно вводить команды.

Для создания команды нам нужно знать ip адрес машины-назначения.

Допустим, адрес будет такой:

192.168.10.99

В каждом конкретном случае адрес нужно заменить на актуальный.

На машине, на которую необходимо передавать аудио с удалённой машины (т.е. на машине-назначения)

Выполняем команду, которая загрузит модуль PulseAudio, который начнёт прослушивать на ip адресе порт, к которому сможет подключиться машина-источник.

Поскольку в большинстве дистрибутивов GNU/Linux, процесс PulseAudio запускается от имени текущего пользователя, команду нужно вводить в терминале текущего пользователя, не повышая привилегии до суперпользователя.

Итак, команда:

pactl load-module module-native-protocol-tcp auth-ip-acl=192.168.200.99 auth-anonymous=1

На машине, с которой необходимо передавать аудио (т.е. на машине-источнике)

Выполняем команду, которая загрузит модуль PulseAudio, который начнёт подключаться на ip адресе и порт машины назначения.

Поскольку в большинстве дистрибутивов GNU/Linux, процесс PulseAudio запускается от имени текущего пользователя, команду нужно вводить в терминале текущего пользователя, не повышая привилегии до суперпользователя.

Итак, команда:

pactl load-module module-tunnel-sink server=192.168.10.99 sink_name=remote_sink

После этого необходимо на машине-источника открыть панель управления выходными аудио устройствами и выбрать по умолчанию то устройство, в названии которого будет фигурировать название удалённой машины-назначения. Таким образом вывод звука будет переключён в звуковую карту этой машины.

На машине-назначения можно наблюдать подключившееся устройство в списке устройств PulseAudio. Регулируя громкость этого устройства с любой из машин (источника или назначения) на противоположной машине можно наблюдать перемещения ручки громкости.


Вариант настройки через конфигурационные файлы

Все параметры загрузки модулей и основной контекст будет аналогичен разделу "Простой вариант". Общая задача -- поместить эти параметры в конфигурационные файлы и добиться их применения при старте систем.

На машине, на которую необходимо передавать аудио с удалённой машины (т.е. на машине-назначения)

В текущем эксперименте машина-назначения -- это дистрибутив с оболочкой GNOME3, в котором по умолчанию вместо pulseaudio используется pipewire-pulse. Возможно, на других дистрибутивах будет использоваться непосредственно pulseaudio, следовательно на них подгрузку модуля нужно будет конфигурировать в том же файле, в котором это необходимо делать на машине-источнике (описано в следующем подразделе).

Для конфигурирования автоматической загрузки модуля при использовании pipewire-pulse необходимо отредактировать файл:

/usr/share/pipewire/pipewire-pulse.conf

и привести там соответствующий раздел к следующему виду:

...
# Extra scripts can be started here. Setup in default.pa can be moved in
# a script or in pulse.cmd below
context.exec = [
    { path = "pactl" args = "load-module module-native-protocol-tcp auth-ip-acl=192.168.10.99 auth-anonymous=1" }
    #{ path = "pactl"        args = "load-module module-always-sink" }
    #{ path = "pactl"        args = "upload-sample my-sample.wav my-sample" }
    #{ path = "/usr/bin/sh"  args = "~/.config/pipewire/default.pw" }
]
...

При желании, строчки, начинающиеся на знак решётки, можно удалить.

Затем достаточно перезагрузить машину.

На машине, с которой необходимо передавать аудио (т.е. на машине-источнике)

В текущем эксперименте машина-источник -- это дистрибутив с оболочкой MATE, в котором по умолчанию используется звуковой сервер pulseaudio.

Для конфигурирования автоматической загрузки модуля при использовании pipewire-pulse необходимо отредактировать файл:

/etc/pulse/default.pa

и привести там соответствующий раздел к следующему виду:

...
load-module module-tunnel-sink server=192.168.200.99 sink_name=remote_sink
...

Затем достаточно перезагрузить машину.

После этого необходимо на машине-источника открыть панель управления выходными аудио устройствами и выбрать по умолчанию то устройство, в названии которого будет фигурировать название удалённой машины-назначения. Таким образом вывод звука будет переключён в звуковую карту этой машины.

На машине-назначения можно наблюдать подключившееся устройство в списке устройств PulseAudio. Регулируя громкость этого устройства с любой из машин (источника или назначения) на противоположной машине можно наблюдать перемещения ручки громкости.


Важный момент

Для того, чтобы после перезагрузки обеих машин система передачи аудио сразу заработала, необходимо сначала перезагружать машину-назначения, затем -- машину-источник.

Если машина назначения-была перезагружена, а машину-источник перезагружать не представляется возможным, то под текущим пользователем на машине-источнике необходимо выполнить команду

pulseaudio -k

Эта команда остановит текущий процесс polseaudio, который затем автоматически будет перезапущен. Таким образом отработает загрузка модуля и машина-источник вновь соединится с машиной-назначения и система передачи аудио по локальной сети заработает вновь.

Способ для MACOS

Устанавливаем Pulseaudio

brew install pulseaudio
brew services start pulseaudio

С помощью команды

pactl list short sinks

можно узнать индентификаторы ваших аудио устройств, это может понадобиться для установки устройства по умолчанию для pulseaudio (это нужно если у вас несколько устройств вывода и вы хотите установить именно, то которое вам нужно):

pactl set-default-sink 1__2  

1__2 - пример индентификатора, да, да в MACOS они выглядят странно!

Все остальное так же как в GNU/Linux