Как настроить приемник PulseAudio?

16

Я пытаюсь настроить приемник PulseAudio на моем Raspberry Pi, чтобы передавать туда все системные звуки с моего компьютера. Каков наилучший способ сделать это?

Например, можно ли смотреть фильмы или задержка слишком высока? Я попробовал это некоторое время назад, используя gstreamer, но с задержкой около 2 секунд, что бесполезно для моих требований.

скоро
источник
1
Я получаю секунду или две задержки.
Златовласка

Ответы:

19

В официальной инструкции по созданию «прямой связи» в сети , мы надеемся , просто работа для большинства людей, но это , кажется , PulseAudio и я не ладят , что хорошо: у меня ушло часа . [Помимо «прямого соединения», вы также можете использовать «туннельный» метод, описанный ниже, но я рекомендую сначала прочитать это.]

Теперь у меня есть (Fedora 17) рабочий стол потокового звука на пи. Я /etc/pulseсвернул файлы конфигурации с обеих сторон. На стороне рабочего стола:

/etc/pulse/client.conf

# See man pulse-client.conf
default-server = tcp:192.168.2.13:4713

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

> pulseaudio --start
N: [pulseaudio] main.c: User-configured server at tcp:192.168.2.13:4713, refusing to start/autospawn.

Он будет работать на переднем плане (возможно, потому что тогда он не читает pulse-client.conf?). Однако , как выясняется, вам вообще не нужно запускать его на стороне рабочего стола (отправляющего) , что не прописано в pulseaudio docs. Используя lsof -i -Pэто, кажется, что плагины более низкого уровня для различных медиаплееров делают работу.

Итак, эта строка «client.conf» - это на самом деле все, что вам нужно на настольном компьютере / клиентской стороне, если все, что вы собираетесь сделать, это использовать сеть (но см. «Еще больше сложностей» ниже).

Хотя демон pulseaudio (на принимающей / серверной стороне) можно запускать как системную службу, разработчики Pulse рекомендуют его , а на самом деле сценарий pi только вызывает предупреждение: вам все равно нужно запустить это сам. Fedora даже не включает запись службы загрузки systemd для него.

Следовательно, на стороне pi вы должны явно запустить и остановить процесс pulseaudio server, настроенный следующим образом:

/etc/pulse/daemon.conf

# See man pulse-daemon.conf
log-level = info
exit-idle-time = 10800 # 3 hours

Вы можете использовать -1 для exit-idle-timeсохранения работы демона на неопределенный срок. Остерегайтесь, это секунды, и по умолчанию это 20 (это означает, что он будет «загадочно» умирать, если вы не установите это).

/etc/pulse/default.pa

# See man default.pa
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.2.0/24
load-module module-alsa-sink device=hw:0,0

Поскольку это сетевое приложение, запускать его с правами root не рекомендуется. Тем не менее, как уже упоминалось man pulseaudio, хорошей идеей является «сдать в аренду» процесс, чтобы придать ему более высокий приоритет. Вы можете сделать это вручную с помощью nice, но pulseaudio сделает это автоматически для пользователя root или членов pulse-rtгруппы, если исполняемый файл имеет значение «setuid», то есть он может использовать некоторые привилегии пользователя root, а затем переключиться на правильный непривилегированный uid ( pingи passwdТакже нужно сделать это). Итак (как root или sudo):

chmod u+s /usr/bin/pulseaudio

Не существует pulse-rtгруппы, созданной при установке pulseaudio на raspbian, так что тогда:

groupadd pulse-rt

Это даст вам подсказку типа 1003. Добавьте (например) пользователя pi в эту группу:

usermod -aG pulse-rt pi

Но на raspbian вы все равно не сможете переиграть как пи. Для этого добавьте в /etc/security/limits.conf:

@pulse-rt       hard nice -20
@pulse-rt       soft nice -20

Вы должны на самом деле запустить вход в систему, прежде чем эти изменения вступят в силу; если вы используете ssh с пи, просто используйте login. Теперь вы можете запустить pulseaudio, и он получит само -11, что, вероятно, имеет более высокий приоритет, чем большинство других процессов (посмотрите на значение NICE в top).

Во время воспроизведения звука, передаваемого по сети, pulseaudio on the pi использует около 10% процессорного времени и тривиальный объем памяти. :) Он и мой рабочий стол находятся в проводной локальной сети; Импульсные потоки исходных данных в pcm (я полагаю), поэтому использование полосы пропускания соответствует частоте дискретизации источника, 1 кБ / с и выше. К сожалению, при просмотре видео наблюдается заметная задержка звука.

Еще больше осложнений ...

К сожалению, ни одно из различных звуковых приложений с моего компьютера не работало сразу; mpg123не будет работать вообще. Для этого на fedora вам понадобится mpg123-plugins-pulseaudioпакет. Для флэш-содержимого в браузере (например, youtude) вам нужно alsa-plugins-pulseaudio(это то, что на самом деле подключается к удаленному серверу). Другие дистрибутивы должны иметь похожие пакеты. Если вы ранее использовали pulaudio (у меня не было), возможно, они уже установлены.

Настольные звонки KDE также не работали. Эту проблему сложнее решить, поскольку она ищет локальный сервер pulseaudio и, как описано, использование прямого соединения означает, что ни один сервер не может быть запущен локально. Обходным путем является использование метода «туннель».

модуль-туннель раковина

Это другой способ, упомянутый в pulaudio docs. В этом случае у вас есть сервер, работающий с обеих сторон и один раздающий другой. Для этого закомментируйте «default-server» /etc/client.confи добавьте локальный /etc/default.paфайл, содержащий:

load-module module-tunnel-sink sink_name=rpi_tunnel server=tcp:192.168.2.13:4713 sink=bcm1

Если вы не sink_nameвставите, pulseaudio не запустится. sinkСсылается на имя раковины на стороне пи, который затем также нуждается именем; добавить соответствующий sink_nameк module-alsa-sinkлинии в default.paтам:

load-module module-alsa-sink device=hw:0,0 sink_name=bcm1 

Запустите сервер с обеих сторон и предварительно ... вроде. В то время как все, включая звуковые сигналы KDE, теперь переносились, воспроизведение флэш-памяти в браузере сильно зависало. Тем не менее, в другой среде рабочего стола (на самом деле, просто оконный менеджер, fvwm) это было хорошо.

Мне нравится KDE, но я могу жить без звуков, поэтому сейчас я буду придерживаться прямой связи.

Исправление проблем

Если у вас есть проблемы, использование pulseaudio -vvvv --log-level=debugна пи дает много отладочных сообщений. Первоначально, когда я не мог получить звук на пи, это сообщало о проблеме, «связанной с ошибкой в ​​драйвере ALSA bcm2835», которая казалась мне странной, так как звук был хорош только с alsa, и я уверен, что есть программное обеспечение пи, которое зависит от на pulseaudio - apt-get remove pulseaudioи переустановка, apt-get install pulseaudioказалось, исправила это ... Не то решение, которое мне нравится видеть, но, эй, по крайней мере, теперь я могу слушать tish без необходимости подключать колонки в каждую коробку. В основном.

златовласки
источник
Спасибо за исчерпывающий ответ. Однако один вопрос: что происходит с аудио, исходящим прямо от Pi?
Винсент
Не знаю, пытался ли я когда-либо это делать (я больше этим не занимаюсь), но pulseaudio должен быть мультиплексором, поэтому он должен работать.
Златовласка