Configuring Linux
7 June 2010

Сетевой аудиосервер на основе pulseaudio в ubuntu

Одна из интересных возможностей аудиосервера pulseaudio — это передача аудиопотока по сети на удалённые аудиоустройства. В моём случае таким устройством оказалась звуковая карточка в торрентокачалке с подключенными колонками и с ubuntu server 10.04 на борту. Под катом лежит miniHOWTO по установке и настройке сетевого сервера pulseaudio.

Настройка клиента


Настройка клиента тривиальна. Ставим утилиту, которая сидит в трее и помогает быстро переключаться между серверами pulseaudio.
sudo apt-get install pulseaudio padevchooser

Далее запускаем её:
Меню — Sound & Video — PulseAudio Device Chooser
Добавим в автозапуск. Для этого щёлкаем на иконку в трее и выбираем пункт Preferences… Отмечаем флажок «Start applet on session login».

После настройки сервера его можно выбрать в меню.

Теперь любая программа, использующая pulseaudio для вывода звука, может воспроизводить звук через аудиокарту удалённого компьютера.

Настройка сервера


1. Ставим Avahi, если не стоит:
sudo apt-get install avahi-daemon

2. Нам необходим pulseaudio и модуль, автоматически размещающий данные о наличии аудиосервера в локальной сети через службу Avahi.
sudo apt-get install pulseaudio pulseaudio-module-zeroconf

3. Создадим группу audio, участники которой имеют право доступа к аудиоустройствам:
sudo groupadd audio

4. Добавим себя в эту группу:
sudo gpasswd -a user audio

5. Добавим себя ещё и в эту группу, для доступа к pulseaudio:
sudo gpasswd -a user pulse-access

6. Поставим alsa.
sudo apt-get install alsa libasound2-plugins

7. Убедимся, что вам доступны аудиоустройства. Эта комманда покажет список доступных устройств в системе.
aplay -l

8. Подправим конфиг pulseaudio:
sudo nano /etc/pulse/default.pa

У меня пропадал сигнал на alsa устройстве при одновременно включенных module-native-protocol-tcp и module-udev-detect (предположительно это баг или мои кривые руки), поэтому я убрал автоопределение звуковых карт через udev, удалив эту часть конфигурационного файла
### Automatically load driver modules depending on the hardware available
.ifexists module-udev-detect.so
load-module module-udev-detect
.else
### Alternatively use the static hardware detection module (for systems that
### lack udev support)
load-module module-detect
.endif

и раскомменторовав это
### Load audio drivers statically (it's probably better to not load
### these drivers manually, but instead use module-hal-detect --
### see below -- for doing this automatically)
load-module module-alsa-sink


Для доступа из сети к аудиосерверу раскомментируете это и добавьте параметры загрузки модуля module-native-protocol-tcp:
### Network access (may be configured with paprefs, so leave this commented
### here if you plan to use paprefs)
load-module module-esound-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/16
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/16
load-module module-zeroconf-publish

где 127.0.0.1;192.168.0.0/16 — это сети, в которых будет доступен наш сервер. Так же не забудьте открыть доступ к pulseaudio в iptables.

С конфигом всё.

9. Теперь нужно перезагрузить сервер. Если все прошло успешно — то у наш сервер должен появится в PulseAudio Device Chooser у клиента

Запустить аудиосервер можно, запустив следующую комманду от имени пользователя:
pulseaudio -D
Остановить так:
pulseaudio -k

+3
17.9k 39
Comments 11