LINUX.ORG.RU

Так как же работает сетевой звук pulseaudio? Получается не так, как я думал.

 


1

1

Сразу предвосхищу воспаления. Не важно что это, pulseaudio или pipewire-pulse, вопрос не касается реализации.

Есть две тачки, на одной пики локальная и удалённая. Хочу пробросить звук с локальной на удалённую, т.е. проигрываетль работает на локальной, а звук доносится из динамиков на удалённой. Для этого:

  • на локальной создаю файл с клиентскими конфигами пульсаудио (допустим он называется .pulse-client.conf, не важно);
  • в этом файле прописываю ориентировку на пульсаудио-сервер, работающий на удалённой машине.
  • в экспортируемую переменную среды PULSE_CLIENTCONFIG кладу путь к этому файлу.

После этого я по моим представлениям ожидаю, что в среде, где присутствует эта переменная, звук из проигрывателя побежит на удалённые колонки. Но не тут-то было, по непонятным для меня причинам pactl info продолжает показывать "Строка сервера: unix:/run/user/1000/pulse/native" вместо строки, указанной в файле $PULSE_CLIENTCONFIG. И сейчас по тексту далее следует то, в чём заключается моё недоумение и вопрос. pactl начинает показывать правильную строчку (и звук бежит в сеть) только после того, как я перезапускаю на этой же (локальной) тачке службу pulseaudio.service (systemctl –user restart pulseaudio.service).

Уважаемые знатоки, внимание вопрос. При чём тут локальная служба pulseaudio? Разве клиенты (например, vlc) не должны руководствоваться лишь конфигом из $PULSE_CLIENTCONFIG и самостоятельно идти в сеть, как там написано? Как это работает?

★★★

Я абсолютно далёк от этой темы, но:

  • Твой эксперимент показывает что не должны
  • Логично предположить что клиенты вообще ничего про конфиг пульса знать не должны, они отправляют аудио в этот самый пульс, а он дальше рулит. Т.е. логично, что когда ты его перезапускаешь, он узнаёт из своего конфига что надо шипеть по сети и начинает это делать.
vitruss ★★★★★
()
Ответ на: комментарий от vitruss

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

Независимо от того, как это реализовано на самом деле, звучит нелогично. Сразу возникает ряд вопросов:

  • Если клиенты вообще ничего про конфиг пульса знать не должны, то почему тогда он называется pulse-client.conf(5), в отличие от pulse-daemon.conf(5), и путь к нему берётся через переменную PULSE_CLIENTCONFIG?
  • Если они отправлют аудио в этот самый пульс, то откуда они знают его адрес для IPC с ним, если не через какой-то конфиг (если это конфиг, то почему не pulse-client.conf)?
  • Неэффективный крюк, сложная схема. Зачем пропускать звук через прослойку другого процесса (локального сервера), если можно сразу отправлять на нужный сервер, это же гемор и лаги/фризы по звуку?
normann ★★★
() автор топика
Ответ на: комментарий от vitruss

Вот цитата из man pulse-client.conf:

The PulseAudio client library reads configuration directives from a configuration file on startup.

Значит предположение что

клиенты вообще ничего про конфиг пульса знать не должны

Не верно.

normann ★★★
() автор топика

Я использую скрипт (примитивный, можно на sh переписать) для отправки звука по сети

Принимаю звук на другом устройстве через

Или через (редко, так как через mpv задержка большая)

mpv tcp://192.168.0.100:8888 --demuxer=rawaudio -demuxer-rawaudio-format=s16le --demuxer-rawaudio-rate=44100 --cache=no --profile=low-latency --untimed --demuxer-rawaudio-channels=2

Никаких конфигов не создаю, не факт что у тебя заработает, но у меня на разных дебианах просто работает.


То как ты хочешь, а именно пробросить звук из пульсы на машине А в пульсу на машине Б, я не знаю.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 3)
Ответ на: комментарий от normann

А ещё, пока не забыл, заметка, если ты на ПК с которого передаёшь звук используешь блютус наушники, то пока они подключены звук по сети идти перестанет, и идёт только по блютусу, при отключении наушников звук по сети восстанавливается.

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

Пишу это потому что я многодумал и долго тупил когда у меня возникла такая ситуация, сидел как дурак сеть ковырял, пульсу под gdb запускал, чего мол трафика звукового нет, а оно вон чево.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)

Тред не читал, пульс-сервер должен работать на обоих компьютерах, т.к. передача звука работает между серверами. Когда все правильно настроено, у тебя локально появляется синк и сурс звука с удаленного компа. Локально никаких других звуковых устройств может не быть.

Khnazile ★★★★★
()
Ответ на: комментарий от normann

Вот я почитал топик и ссылки и, выглядит, что есть 2 варианта:

  1. Приложение > пульс локальный > пульс удаленный
  2. Приложение > пульс удаленный.

Первый вариант подходит если твоё приложение ничего не знает про пульс-аудио. И он же реализуется когда ты перезапускаешь пульс аудио от пользователя.

Второй вариант это если ты в конфиге приложения сразу пропишешь куда посылать звук, как в случае mpd. Возможно, тогда приложение может игнорировать конфиг пульса и читать только свой.

Короче, читай как настроить удаленный звук через пульс в своём проигрывателе или используй прокладку из локального пульса.

vitruss ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.