Вопрос или проблема
Я успешно настроил сервер и клиент 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. Наша конфигурация
На локальном клиенте
-
Загрузите модуль для туннелирования:
pactl load-module module-tunnel-sink server=<IP-адрес_сервера>
-
Настройте звук:
После загрузки модуля, у вас будет новый sink, к которому можно будет отправлять вывод. Используйте командыpacmd
илиpactl
для управления выводами.
На удалённом сервере
- Настройте RTP или туннель:
Убедитесь, что модуль RTP илиmodule-tunnel-sink
также загружен на сервере, чтобы принять звук от клиента. Для RTP можно сделать следующее:pactl load-module module-rtp-receive
3. Переключение между устройствами
Для переключения между вашим локальным звуковым устройством и удалённым sink вы можете использовать pavucontrol
или команды терминала.
-
С помощью pavucontrol:
- Запустите
pavucontrol
. - Найдите вкладку "Playback" или "Output Devices", где будут показаны все доступные устройства вывода.
- Выберите нужное устройство для вывода звука.
- Запустите
-
С помощью терминала:
- Используйте
pactl list sinks
для получения списка всех доступных sink. - Переключайте вывод с помощью команды:
pactl set-default-sink <имя_вашего_выхода>
- Используйте
4. Примечание
Обратите внимание, что Flash и некоторые другие приложения могут отправлять звук в PulseAudio в малых пакетах, что может перегружать сеть. Это может быть одной из причин, почему использование прямых соединений не всегда предпочтительно. Если вы столклись с проблемами, связанными именно с этим, учитывайте использование более стабильных методов (например, RTP) для стриминга звука.
Заключение
Таким образом, использование виртуального sink, подключенного к удалённому серверу через туннель или RTP, позволит вам динамически переключать вывод звука без необходимости перезапуска приложений. Это решение должно помочь вам добиться желаемого результата в управлении звуком в вашей сетевой среде.