Звуковой сервер Pulseaudio — передаем по сети

Pulseaudio — звуковой сервер

Было бы очень удобно, если бы дома была распределенная звуковая система, одна пара колонок на всю квартиру, а всякие ПК и ноутбуки могли на нее отправлять свои звуковые потоки, так можно избавится от кучи проводов идущих от ПК, это добавило бы мобильности к ноутбуку, уже не пришлось носить по дому мобильные колонки для ноутбука, т.к зачастую ноутбуки оборудованы отвратительным звуком. А еще можно было бы усложнить и поместить по паре акустических систем в разных комнатах и при переходе между комнатами переключать звук между ними, но как этого достичь? Ответ лежит на поверхности — уже давно в Ubuntu и Debian и других дистрибутивах установлен звуковой сервер Pulseaudio, в его функции заложена такая замечательная возможность передачи звука через локальную сеть.

Что необходимо для звукового сервера?

  • ПК который будет выполнять роль звукового сервера
  • Звуковые карты для каждой акустической системы

В качестве ПК прекрасно подойдет домашний сервер с утановленной ОС Debian.
По умолчанию пакет не идет в минимальной установке Debian, поэтому производим его установку:

1
apt install pulseaudio pulseaudio-module-zeroconf

Стоит отметить что Pulseaudio может работать как в служба пользователя так и как системная служба.
В первом режиме служба не запускается пока пользователь не зайдет в систему, во втором служба запущена всегда.

Pulseaudio — переводим в системный режим

Переходим в каталог

1
cd /etc/pulse/

Там находится четыре файла

1
2
ls *
client.conf  daemon.conf  default.pa  system.pa

client.conf — настройки для клиентской части звукового сервера.
daemon.conf — настройки Pulseaudio в режиме службы
default.pa — настройка модулей в режиме пользователя
system.pa — настрока модулей в системном режиме

В звуковом сервере нас интересуют файлы daemon.conf и system.pa

Открыаем файл daemon.conf
#Включаем режим сервиса

1
2
3
4
5
6
7
#Отключить загрузку модулей пользователем
allow-module-loading = no
#Запретить запросы пользователя
allow-exit = no
cpu-limit = no
#Приоретет поцесса - устанавливаем наивысший
high-priority = yes

В файл system.pa добавляем:

1
2
3
#Загружаем модуль для доступа по сети и настраиваем доступ из локальной сети
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/16
load-module module-zeroconf-publish

запускаем звуковой сервер Pulseaudio, напоминая что настройка ведется из под пользователя root:

1
pulseaudio --system -D

Клиенты для Pulseaudio

Проверим проигрывание звука через клиент, в качестве клиента выступает ПК с установленной убунту 16.04
Устанавливаю на клиенте pavucontrol:

1
apt install pavucontrol -y

Запускаем pavucontrol из системного меню
pavucontrol

В командной строке вводим команду на создание туннеля к звуковому серверу:

1
pactl load-module module-tunnel-sink-new server=192.168.2.1 sink_name=Remote channels=2 rate=44100

в списке устройств pavucontrol появится еще одно устройство которое соответствует нашему туннелю, если его выбрать, то должен звук пойти через него.
Для постоянного подключения добавляем строку

1
echo "load-module module-tunnel-sink-new server=192.168.2.1 sink_name=Remote channels=2 rate=44100" >> /etc/pulse/default.pa

Для управления громкостью подключаемся к удаленному серверу

1
PULSE_SERVER=192.168.1.25 pavucontrol

Тут же можно переключать звуковые карты для каждого звукового потока

Теперь нам необходимо создать сервис для pulseaudio
Создаем файл:

1
touch /etc/systemd/system/pulseaudio.service

Открываем и добавляем строки:

1
2
3
4
5
6
7
8
9
10
11
12
nano /etc/systemd/system/pulseaudio.service

[Unit]
Description=PulseAudio Daemon

[Install]
WantedBy=multi-user.target

[Service]
Type=simple
PrivateTmp=true
ExecStart=/usr/bin/pulseaudio --system

Перегружаем службы, добавляем в автозагрузку и запускаем:

1
2
3
systemctl daemon-reload
systemctl enable pulseaudio
systemctl start pulseaudio

Проверяем службу

1
2
3
4
5
6
7
8
9
10
11
12
13
service pulseaudio status
● pulseaudio.service - PulseAudio Daemon
   Loaded: loaded (/etc/systemd/system/pulseaudio.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2018-03-12 21:59:48 MSK; 2s ago
 Main PID: 1807 (pulseaudio)
    Tasks: 4 (limit: 4915)
   CGroup: /system.slice/pulseaudio.service
           └─1807 /usr/bin/pulseaudio --system --realtime

мар 12 21:59:48 router pulseaudio[1807]: N: [pulseaudio] main.c: Running in system mode, forcibly disabling SHM mode.
мар 12 21:59:48 router pulseaudio[1807]: N: [pulseaudio] main.c: Running in system mode, forcibly disabling exit idle time.
мар 12 21:59:48 router pulseaudio[1807]: W: [pulseaudio] main.c: OK, so you are running PA in system mode. Please make sure that you actuall
мар 12 21:59:48 router pulseaudio[1807]: W: [pulseaudio] main.c: Please read http://www.freedesktop.org/wiki/Software/PulseAudio/Documentati

При каждом перезапуске сервера туннель пропадает на клиенте, поэтому перезапускаем pulseaudio на клиенте, должен появиться туннель в списке устройств в pavucontrol

1
2
pulseaudio -k
pulseaudio -D

Start service

В процессе настройки столкнулся с особенностью — по умолчанию после перезагрузки звук отключен.
Проблема решилась установки пакета alsa-utils и сохранения настроек с помощью команды alsactl store

1
2
apt install alsa-utils -y
alsactl store

Управлять мастер-уровнем можно с помощью команды alsamixer
alsamixer

P.S. После каждой перезагрузки сервера необходимо перезапускать Pulseaudio на клиенте или просто отправлять его в перезагрузку.

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.