Вывод звука через колонки на сервере и на клиенте
Как и обещал, продолжаю тему вывода звука на колонки.
Предыдущее решение Вывод звука через колонки на сервере и только на сервере направляло все аудиопотоки на сервер.
А что если сервер сломается или что-то будет с роутером и колонки надо будет подключать локально? Придётся лезть в конфиг /etc/pulse/client.conf, комментировать строчку и всё перезапускать. Только после этого звук пойдёт в локальную звуковуху.
Но есть решение лучше.
Можно настроить одновременный вывод звука и на сервер и в локально. В этом случае куда бы не были подключены колонки, звук будет.
Сервер настраиваем по инструкции в предыдущей “статье(Вывод звука через колонки на сервере)”:/blog/2013/vyvod-zvuka-cherez-kolonki-na-servere/
А на клиенте делаем следующее:
Редактируем файл /etc/pulse/default.pa В его конец добавляем следующие строчки:
#my network config
load-module module-tunnel-sink server=<server_ip>
load-module module-combine sink_name=combined slaves="tunnel-sink.<server_ip>,alsa_output.pci-0000_00_1b.0.analog-stereo"
set-default-sink combined
Что здесь что: <server_ipgt; это IP сервера, к которому подключены колонки
Строчка load-module module-tunnel-sink server=<server_ip> создаёт виртуальное устройство вывода звука, которое выводит его на сервере.
Строчка load-module module-combine sink_name=combined slaves=“tunnel-sink.<server_ip>,alsa_output.pci-0000_00_1b.0.analog-stereo” создаёт комбинированное виртуальное устройство вывода звука, которое выводит звук в два других устройства. Эти устройства задаются параметром slaves. tunnel-sink.<server_ip> это имя устройства, созданного в первой строке.
alsa_output.pci-0000_00_1b.0.analog-stereo - имя звуковой карты на данном компьютере. Узнать его можно командой pacmd list-sinks.
Её вывод даст что-то вроде:
index: 0
name: <alsa_output.pci-0000_00_1b.0.analog-stereo>
driver: <module-alsa-card.c>
....
Строчка set-default-sink combined делает комбинированное звуковое устройство - устройством вывода по-умолчанию.
По поводу tunnel-sink.<server_ip>
В интернете я встречал разное имя этого устройства, поэтому хорошо бы выяснить его на месте.
Как это сделать?
Все строчки, которые я прописал в конфиг можно передать на вход команде pacmd. Вот так:
pacmd load-module module-tunnel-sink server=<server_ip>
Затем командой pacmd list-sinks посмотреть доступные устройства. Там будет что-то такое:
index: 0
name: <alsa_output.pci-0000_00_1b.0.analog-stereo>
driver: <module-alsa-card.c>
...
index: 1
name: <tunnel-sink.192.168.2.30>
driver: <module-tunnel.c>
...
Дополнительные настройки KDE4
Для того чтобы звук действительно выводился в комбинированное устройство надо зайти в System Settings -> Multimedia и для всех пунктов в закладке Приоритет устройств поставить устройство Simultaneous output… первым в списке.
Конец
Теперь убиваем pulseaudio и перезапускаем X-сервер. Всё должно заработать.
Послесловие
Все эти телодвижения я делал ради того, чтобы можно было пользоваться одними колонками с нескольких компьютеров дома. Однако на втором компьютере у меня нормально не заработало. Звук есть, но прерывистый. Причём прерывистый и в локальных колонках и в сервере. Прерывистость появляется когда я создаю simultanous устройство и исчезает, когда я его удаляю.
Я проверил и конфиги и версии пакетов - всё совпадает. Грешу пока что на то, что второй компьютер подключен по Wi-Fi. Пока не было возможности протестить на проводе.
Btsync и утечка памяти .deb пакет для btsync