Pipewire combine-stream не выводит на слейвы

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

Мой Debian testing использует pipewire и pipewire-pulse для вывода аудио на наушники и динамики с помощью модуля combine-sink. Это работало нормально в течение длительного времени, а вчера вдруг перестало работать (ни наушники, ни динамики не воспроизводят звук при воспроизведении аудио на комбинированный выход).

Логи Apt показывают, что pipewire был обновлен до версии 1.2.5-1 десять дней назад, и машина перезагружалась с тех пор, и это все еще работало как ожидалось, поэтому это не выглядит как обновление pipewire или pipewire-pulse. Я не знаю, что могло измениться: машина не перезагружалась между рабочим и нерабочим состоянием, и перезапуск после того, как оно перестало работать, не помог. Я не смог найти никаких следов того, что происходило с pipewire или pulse в это время в журнале, ни никаких подсказок о том, что могло пойти не так.

Я сузил проблему до модуля combine-sink, который не выводит звук на подчиненные устройства следующим образом:

  • Если я переношу приложение, воспроизводящее звук, на выход для наушников, звук воспроизводится там
  • Если я переношу приложение, воспроизводящее звук, на выход для динамиков, звук воспроизводится там
  • Если я переношу приложение, воспроизводящее звук, на комбинированный выход, звук не воспроизводится на любом из устройств. Однако pavucontrol показывает, что комбинированный выход активен, а на физических устройствах активности нет.

Вот что pavucontrol думает о моей настройке, когда воспроизводится звуковой сигнал на комбинированный выход:

скриншот pavucontrol
В этом скриншоте комбинированный выход называется All, наушники Casque, а динамики Enceintes. Обратите внимание, что есть активность на All, но нет активности на любом из других выходов.

Вот что Helvum думает о моей настройке (неактуальные вещи, такие как входные устройства, перемещены влево от скриншота):

скриншот helvum

Вывод Helvum выглядит так, как будто All должен воспроизводить звук как на Casque, так и на Enceintes.

Вот описание объекта pipewire, связанного с комбинированным выходом, как выводится командой pw-cli info:

        id: 30
        permissions: r--m-
        type: PipeWire:Interface:Module/3
        name: "libpipewire-module-combine-stream"
        filename: "/usr/lib/x86_64-linux-gnu/pipewire-0.3/libpipewire-module-combine-stream.so"
        args: "{
      combine.mode = sink
      node.name = "All"
      node.description = "All"
      combine.latency-compensate = false
      combine.props = {
        audio.position = [ FL FR ]
      }
      stream.props = {
      }
      stream.rules = [
        {
          matches = [
          {
            media.class = "Audio/Sink"
            node.nick = "~Enceintes|Casque"
          }
          ]
          actions = {
            create-stream = {
            }
          }
        }
      ]
    }"
*       properties:
*               module.name = "libpipewire-module-combine-stream"
*               object.id = "30"
*               object.serial = "30"
*               module.author = "Wim Taymans <[email protected]>"
*               module.description = "Объединить несколько потоков в один поток"
*               module.usage = "( node.latency=<задержка как дробь> ) ( combine.mode=<режим потока, воспроизведение|захват|выход|источник>, по умолчанию:выход ) ( node.name=<имя потока> ) ( node.description=<описание потока> ) ( audio.channels=<количество каналов, по умолчанию:2> ) ( audio.position=<расположение каналов, по умолчанию:[ FL FR ]> ) ( combine.props=<свойства> ) ( stream.props=<свойства> ) ( stream.rules=<свойства> ) "
*               module.version = "1.2.5"

Я пробовал перезапускать pipewire, удалять свою настройку, создающую комбинированный выход, и добавлять его вручную (как с помощью pw-cli, так и pactl), но все мои попытки привели к одному и тому же состоянию, где, казалось бы, комбинированный выход воспроизводит звук, но ни одно физическое устройство (или любое из связанных выходов) не воспроизводит.

Я не знаю, что еще сделать, чтобы расследовать, в чем проблема. Как мне дальше исследовать?

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

Проблема с отсутствием звука в устройстве combined sink PipeWire может возникнуть по нескольким причинам. Давайте разберем ваше описание обстоятельств и попробуем выяснить, что может быть не так, а также предложим возможные пути решения.

1. Проверка конфигурации PipeWire

Вы указали, что проблема возникла после того, как система была обновлена. Хотя сама версия PipeWire не обновлялась за последние 10 дней, возможно, какие-то изменения в конфигурации повлияли на работу модуля combined sink. Проверьте следующее:

  • Конфигурационные файлы: Убедитесь, что файлы /etc/pipewire/pipewire.conf и /etc/pipewire/pipewire-pulse.conf не были изменены без вашего ведома. Обратите внимание на параметры, связанные с комбинированием потоков, такими как combine.mode и stream.rules.

2. Тестирование и диагностика

Вам следует выполнить несколько диагностических шагов:

  • Логи PipeWire: Запустите journalctl -xe в терминале и посмотрите логи PipeWire на наличие ошибок или предупреждений, которые могли возникнуть при попытке воспроизведения звука через combined sink.
  • Состояние модуля: Используйте команду pw-cli dump для получения информации о текущем состоянии PipeWire и его модулях. Обратите внимание на то, правильно ли отображаются ваши устройства (Casque и Enceintes) и комбинированный поток.

3. Параметры комбинированного потока

Согласно выводу команды pw-cli info, параметры модуля combine.stream настроены правильно. Однако стоит проверить следующее:

  • Убедитесь, что в stream.rules отсутствуют ошибки в синтаксисе, и что node.nick на самом деле соответствует вашим устройствам. В данный момент вы используете регулярное выражение, которое корректно находит оба устройства. Однако возможно, что одно из устройств временно недоступно (например, если оно было отключено).
  • Состояние с аппаратной точки зрения: Убедитесь, что наушники и динамики физически подключены и корректно работают. Попробуйте их протестировать отдельно, как вы уже сделали.

4. Повторное создание комбинированного потока

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

  1. Удалите текущий комбинированный поток:
    pactl unload-module module-combine-sink
  2. Перезапустите PipeWire:
    systemctl --user restart pipewire
  3. Создайте новый комбинированный поток вручную:
    pactl load-module module-combine-sink 

5. Проверка обновлений и зависимостей

Убедитесь, что все пакеты, связанные с PipeWire, обновлены до последних стабильных версий. Запустите:

sudo apt update
sudo apt upgrade

6. Сообщество и поддержка

Если проблема все еще сохраняется, вы можете обратиться за помощью в сообщество PipeWire. В таких случаях помогает создание отчета о проблеме в системе отслеживания ошибок или поиск аналогичных проблем на форумах. Возможно, кто-то уже сталкивался с подобной ситуацией после обновления.

Заключение

Проблемы с комбинированными потоками в PipeWire могут быть вызваны несколькими факторами, от неверной конфигурации до аппаратных дефектов. Следуя описанным шагам, вы сможете диагностировать и устранить возникшие проблемы. Если все вышеперечисленное не поможет, обращение к сообществу пользователей может оказаться важным задалым шагом.

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

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