Pulseaudio по сети – смена вывода на лету

Вопрос или проблема

Я успешно настроил сервер и клиент PulseAudio для передачи аудио по сети. Это использует прямое соединение: http://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Network/#index1h2

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

Используя module-tunnel-sink, я мог бы просто переместить sink-input на желаемое устройство, но это не вариант, так как это плохо работает с Flash:

они заставили меня поверить, что Flash каким-то образом отправляет звук в PulseAudio таким образом, что это создает много сетевого трафика (то есть много мелких пакетов, а не пропускной способности); это перегружает сетевой “туннель” PulseAudio

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

Есть идеи, как я могу это решить?

Вы смотрели pavucontrol? Это графический интерфейс для управления потоками pulseaudio (громкость и выходные устройства). Я использую его для переключения между различными звуковыми картами. По крайней мере, это может помочь вам проверить, используете ли вы правильные команды для переключения выходного устройства в pactl.

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

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

Вместо этого создайте новый sink, который будет подключен через туннель или через RTP или аналогичный модуль на удаленном устройстве. Для RTP и т.д. вам также нужно будет настроить удаленное устройство.

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

Ответ или решение

Для решения вашей проблемы с переключением вывода звука между локальным и удалённым устройством (сёрвером) в системе PulseAudio через сеть, необходимо рассмотреть несколько важных моментов.

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

1. Использование module-tunnel-sink или RTP

Рекомендуется создать новый выходной экземпляр (sink), который будет подключаться к удаленному серверу через модули, такие как module-tunnel-sink или module-rtp-send. Это позволит вам иметь возможность переключать вывод звука в зависимости от ваших потребностей.

2. Наша конфигурация

На локальном клиенте

  1. Загрузите модуль для туннелирования:

    pactl load-module module-tunnel-sink server=<IP-адрес_сервера>
  2. Настройте звук:
    После загрузки модуля, у вас будет новый sink, к которому можно будет отправлять вывод. Используйте команды pacmd или pactl для управления выводами.

На удалённом сервере

  1. Настройте RTP или туннель:
    Убедитесь, что модуль RTP или module-tunnel-sink также загружен на сервере, чтобы принять звук от клиента. Для RTP можно сделать следующее:
    pactl load-module module-rtp-receive

3. Переключение между устройствами

Для переключения между вашим локальным звуковым устройством и удалённым sink вы можете использовать pavucontrol или команды терминала.

  1. С помощью pavucontrol:

    • Запустите pavucontrol.
    • Найдите вкладку "Playback" или "Output Devices", где будут показаны все доступные устройства вывода.
    • Выберите нужное устройство для вывода звука.
  2. С помощью терминала:

    • Используйте pactl list sinks для получения списка всех доступных sink.
    • Переключайте вывод с помощью команды:
      pactl set-default-sink <имя_вашего_выхода>

4. Примечание

Обратите внимание, что Flash и некоторые другие приложения могут отправлять звук в PulseAudio в малых пакетах, что может перегружать сеть. Это может быть одной из причин, почему использование прямых соединений не всегда предпочтительно. Если вы столклись с проблемами, связанными именно с этим, учитывайте использование более стабильных методов (например, RTP) для стриминга звука.

Заключение

Таким образом, использование виртуального sink, подключенного к удалённому серверу через туннель или RTP, позволит вам динамически переключать вывод звука без необходимости перезапуска приложений. Это решение должно помочь вам добиться желаемого результата в управлении звуком в вашей сетевой среде.

Оцените материал
Добавить комментарий

Капча загружается...