После семи месяцев разработки сформирована новая стабильная ветка мультимедийного сервера PipeWire 1.2.0, пришедшего на смену звуковому серверу PulseAudio и отличающийся от него добавлением средств для работы с потоками видео, возможностью обработки звука с минимальными задержками и новой моделью безопасности для управления доступом на уровне отдельных устройств и потоков. Проект поддерживается в GNOME и по умолчанию применяется в Fedora Linux, RHEL, Ubuntu, Debian, SUSE/openSUSE и многих других дистрибутивах Linux. Код проекта написан на языке Си и распространяется под лицензией LGPLv2.1.
PipeWire базируется на многопроцессной архитектуре, позволяющей организовать совместный доступ к контенту нескольких приложений.
Предоставляются возможности для обработки любых мультимедийных потоков, смешивания и перенаправления потоков с видео, а также управления источниками видео, такими как устройства захвата видео, web-камеры или выводимое приложениями содержимое экрана. Например, PipeWire даёт возможность организовать совместную работу нескольких приложений с веб-камерой и решает проблемы с безопасным захватом содержимого экрана и удалённым доступом к экрану в окружении Wayland.
При использовании в роли звукового сервера, PipeWire может обеспечить минимальные задержки и предоставить функциональность, комбинирующую возможности PulseAudio и JACK, в том числе учитывающую потребности систем профессиональной обработки звука, на которую не мог претендовать PulseAudio. Кроме того, PipeWire предлагает расширенную модель безопасности, позволяющую управлять доступом на уровне отдельных устройств и конкретных потоков, и упрощающую организацию проброса звука и видео из изолированных контейнеров и в них. Одной из главных целей является поддержка самодостаточных приложений в формате Flatpak и работа в графическом стеке на базе Wayland.
В новой версии:
- В модель обработки потоков данных на основании графа узлов добавлена поддержка асинхронной обработки, при которой граф узлов не блокируется при отсутствии вывода от определённого узла, а продолжает работу, используя данные от узла, полученные в прошлом цикле. Таким образом, ценой задержки в один цикл удаётся избежать ситуации, когда один узел блокирует работу остальных узлов в графе.
- Реализована концепция групп синхронизированных узлов (node.sync-group), позволяющая создавать группы узлов, одновременно активируемых планировщиком. Функция может использоваться для одновременного планирования активации узлов при запуске транспорта JACK.
- Улучшен вывод сведений об ошибках в файле конфигурации, добавлено упоминание места, где допущена ошибка в настройках (номер строки и позиция в строке).
- Добавлена поддержка технологии Explicit Sync, позволяющей приложениям информировать композитный менеджер на базе протокола Wayland о готовности вывода кадра на экран, что даёт возможность добиться снижения задержек и избавиться от появления артефактов при выводе графики. В частности, Explicit Sync решает проблемы с нарушением вывода и подвисаниями на системах с GPU NVIDIA и включённой поддержкой Wayland.
- Реализована возможность определения обязательных метаданных при согласовании параметров буфера, которые используются для обеспечения поддержки “Explicit Sync”.
- Добавлена поддержка создания и использования нескольких циклов обработки данных (data-loop) в клиенте и сервере. В циклы обработки данных добавлены возможности для привязки к определённым ядрам CPU и выставления приоритетов.
- Предоставлена возможность изменения отладочных уровней, управляющих выводом информации в лог, без перезапуска, используя метаданные.
- Переработана логика связывания пиров (узлов в графе потоков данных, определяющих внешние источники или приёмники данных).
- Приняты патчи для обработки устройств, помеченных как конфликтующие через ALSA UCM (Use Case Manager).
- Добавлен модуль snapcast-discover для потоковой передачи контента в серверы SnapСast.