akademic.name

  • Учёба
  • Вывод звука через колонки на сервере и на клиенте

    Как и обещал, продолжаю тему вывода звука на колонки.

    Предыдущее решение Вывод звука через колонки на сервере и только на сервере направляло все аудиопотоки на сервер.

    А что если сервер сломается или что-то будет с роутером и колонки надо будет подключать локально? Придётся лезть в конфиг /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=&ltserver_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. Пока не было возможности протестить на проводе.

    .deb пакет для btsync